我有一些理论问题要问核心数据和总和功能。
我尝试将值相加核心数据表具有三种方式。
-
获取全部并使用表达式对其进行总结:
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
), the
- 方式更快(
for 1.000.000 data --> 3.54 s
)和
- 方式是最快的(
for 1.000.000 data --> 0.3 s
)
为什么是这样?
如果我理解正确的话,即使是核心数据也需要经历所有1.000.000
数据并求和。这是因为如果有可用的内核,请使用更多内核吗?
No CoreData 不会自己进行求和 - 它将其委托给它的支持 sqllite 数据库,该数据库针对此类事情进行了优化。
基本上 CoreData 发送一个select SUM(sum) from table;
到它的数据库并在那里执行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)