ios – CoreData 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];
}

>让核心数据加起来.

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;
}

令人惊讶的是

>方式是最慢的(对于1.000.000数据 – > 19.2秒),
>方式更快(对于1.000.000数据 – > 3.54秒)和
>方式最快(1.000.000数据 – > 0.3秒)

为什么是这样?

如果我理解正确,即使核心数据需要通过所有1.000.000数据并总结.这是因为如果可用,会使用更多内核吗?

最佳答案 没有CoreData不会自己进行求和 – 它会将其委托给它的支持sqllite数据库,该数据库针对这样的事情进行了优化.

基本上,CoreData从表中发送一个选择SUM(sum);它的数据库和它在那里执行.

点赞