【发布时间】:2014-02-12 06:51:06
【问题描述】:
我有一些关于 Core Data 和 sum 函数的理论问题要问。
我尝试用三种方式对 Core Data 表中的值求和。
-
全部提取并使用表达式总结:
NSArray * array1 = [self getAll:self.managedObjectContext]; int sum = [[array1 valueForKeyPath:@"@sum.sum"] intValue]; -
获取所有并使用 for 循环:
int sum2 = 0; NSArray * array2 = [self getAll:self.managedObjectContext]; for (Test * t in array2) { sum2 = sum2 + [t.sum intValue]; } -
让 Core Data 总结一下。
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 数据并求和。这是因为如果有可用的内核就使用更多的内核吗?
【问题讨论】:
标签: ios xcode performance core-data sum