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 地中获取后排序要快得多。它只是重新排序对象引用,而不实际移动任何数据。
我一直在尝试调试 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 地中获取后排序要快得多。它只是重新排序对象引用,而不实际移动任何数据。