Rendimiento de la suma de datos básicos
Frecuentes
Visto 278 equipos
5
I have some theoretical question to ask about Core Data and sum función.
I try to sum values from Datos principales table with three ways.
fetch all and use expression to sum it up :
NSArray * array1 = [self getAll:self.managedObjectContext]; int sum = [[array1 valueForKeyPath:@"@sum.sum"] intValue];
fetch all and use for loop:
int sum2 = 0; NSArray * array2 = [self getAll:self.managedObjectContext]; for (Test * t in array2) { sum2 = sum2 + [t.sum intValue]; }
let Core Data sum it.
NSArray * array = [self getAllGroupe:self.managedObjectContext]; NSDictionary * i = [array objectAtIndex:0]; id j = [i objectForKey:@"sum"]; (NSArray *)getAllGroupe:(NSManagedObjectContext*)Context{ NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"Test" inManagedObjectContext:Context]; NSExpressionDescription* ex = [[NSExpressionDescription alloc] init]; [ex setExpression:[NSExpression expressionWithFormat:@"@sum.sum"]]; [ex setExpressionResultType:NSDecimalAttributeType]; [ex setName:@"sum"]; [fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:ex, nil]]; [fetchRequest setResultType:NSDictionaryResultType ]; NSError *error; [fetchRequest setEntity:entity]; NSArray *fetchedObjects = [Context executeFetchRequest:fetchRequest error:&error]; return fetchedObjects; }
surprisingly the
- way was the slowest (
for 1.000.000 data --> 19.2 s
), el - way was faster (
for 1.000.000 data --> 3.54 s
) y el - way was the fastest (
for 1.000.000 data --> 0.3 s
)
¿Por qué es esto?
If I understand right even core data need to go through all 1.000.000
datas and sum it. Is this because use more cores if there are available?
1 Respuestas
3
No CoreData doesn't do the summing on it's own - it delegates that to it's backing sqllite database which is optimized for things like that.
Basically CoreData sends a select SUM(sum) from table;
to it's db and it's performed there.
Respondido 12 Feb 14, 07:02
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas ios xcode performance core-data sum or haz tu propia pregunta.
Do you know why is the 1. way slower than 2.-one? - Marko Zadravec
@MarkoZadravec do you execute 1 and 2 in that order on the same context? - dan shelly
I assume that 1 is slower than 2 due because direct property access is probably fast then property access via key value coding - rist