我在CoreData中的表有8列,都是字符串。最大的字符串长度小于10K。iphone核心数据 - 为什么核心数据如此之慢?
首先,我用下面的代码来检索行:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Item" inManagedObjectContext:context]];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"(URL ==[c] %@)", url]];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Time" ascending:NO selector:nil];
NSArray *descriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:descriptors];
[sortDescriptor release];
NSError *error = nil;
NSArray *array = [context executeFetchRequest:fetchRequest error:&error];
这里是性能日志:
2011-05-10 11:47:18.743的Test2 [2176:5907 CoreData:注释:sql连接获取时间:2.6172s
2011-05-10 11:47:21.600测试2 [2176:5907] CoreData:注释:对于144行,总提取执行时间:2.8577s。
144行超过2秒?
然后我构建用于每一行的非coredata对象:
的性能日志(我认为对于一个行读取)用于上述代码if ([array count] > 0) {
for (Item *item in array) {
SimpleItem *sitem = [[SimpleItem alloc] init];
sitem.Title = item.Title;
sitem.Summary = item.Summary;
sitem.URL = item.URL;
[dataDict setObject:sitem forKey:item.URL];
[sitem release];
}
[dataDict release];
}
部分是:
2011 -05-10 11:47:21.617 Test2 [2176:5907] CoreData:sql:SELECT 0,t0.Z_PK,t0.Z_OPT,t0.ZURL,t0.ZSUMMARY,t0.ZIMAGEURL,t0.ZTITLE,t0.ZURL ,t0.ZTIME FROM ZITEM t0 WHERE t0.Z_PK =?
2011-05-10 11:47:21.629的Test2 [2176:5907] CoreData:注释:SQL连接提取时间:0.0098s
2011-05-10 11:47:21.633的Test2 [2176:5907 ] CoreData:注释:总提取执行时间:1行0.0162s。
看起来有毛病。
任何人都可以帮助我提高性能?
另外,我在编辑xcode中的数据模型时检查了URL的“Index”选项。这足以建立索引吗?
需要更多的细节提供任何有用的答案。 – 2011-05-10 10:52:18
@Denis,是的,我更新了我的问题 – Jack 2011-05-10 11:45:13