CoreData 以获取方式排序比获取后排序慢?

CoreData sorting in fetch way slower than sorting after fetch?

我一直在尝试调试 CoreData 提取速度非常慢,sqlite table 只有 1900 条记录,提取需要 1.7 秒。我已经完全消除了谓词,所以它归结为排序。

如果我像这样对获取请求进行排序,则需要 1.7 秒。

    // 1.7 seconds
    request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"dateRaised" ascending:NO],
                                [NSSortDescriptor sortDescriptorWithKey:@"clientCreatedAt" ascending:NO]];
    items = [managedObjectContext executeFetchRequest:request error:nil];

如果我先获取然后进行数组排序,则需要 0.2 秒。

    // 0.2 seconds
    items = [managedObjectContext executeFetchRequest:request error:nil];
    items = [items sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"dateRaised" ascending:NO],
                                                [NSSortDescriptor sortDescriptorWithKey:@"clientCreatedAt" ascending:NO]]];

为什么会这样,我可以做些什么来改进 CoreData 获取?

我想通了。

我的对象有一个数据字段,在某些情况下包含大量数据。这绝对会杀死 Sqlite 中的排序。我不完全确定为什么它在这方面效率如此低下,但这很糟糕。

在 Objective-C 地中获取后排序要快得多。它只是重新排序对象引用,而不实际移动任何数据。