【发布时间】:2011-08-22 09:02:17
【问题描述】:
我在 CoreData 中的表有 8 列,都是字符串。最大字符串长度小于10K。
首先,我使用以下代码检索行:
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 Test2[2176:5907] CoreData:注释:总提取执行时间:144 行 2.8577 秒。
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 从 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.0162 秒。
好像有问题。
谁能帮我提高性能?
另外,当我在 xcode 中编辑数据模型时,我已经检查了 URL 的“索引”选项。这足以建立索引吗?
【问题讨论】:
-
需要更多细节才能提供任何有用的答案。
-
@Denis,是的,我更新了我的问题