3
我有一些理论问题要问关于核心数据和总和函数。CoreData总结性能
我尝试总结核心数据表中有三种方法的值。
获取所有和使用的表达来概括:
NSArray * array1 = [self getAll:self.managedObjectContext]; int sum = [[array1 valueForKeyPath:@"@sum.sum"] intValue];
获取所有和使用循环:
int sum2 = 0; NSArray * array2 = [self getAll:self.managedObjectContext]; for (Test * t in array2) { sum2 = sum2 + [t.sum intValue]; }
让核心数据总结一下。
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; }
令人惊讶的是
- 方式是最慢的(
for 1.000.000 data --> 19.2 s
),则 - 方法是更快的(
for 1.000.000 data --> 3.54 s
)和 - 方式是最快(
for 1.000.000 data --> 0.3 s
)
这是为什么?
如果我理解的话,即使是核心数据也需要经过所有的1.000.000
数据并加以总结。这是因为如果可用,使用更多的内核?
你知道为什么1.方式比2.-one慢吗? –
@MarkoZadravec你是否在同一个上下文中按顺序执行1和2? –
我假设1比2慢,因为直接属性访问可能很快,然后通过键值编码进行属性访问 – rist