我在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