gpt4 book ai didi

iphone - 简单的核心数据获取非常慢

转载 作者:行者123 更新时间:2023-12-03 18:34:50 24 4
gpt4 key购买 nike

我的 iPhone 应用程序有一个实体 Words,其属性为 wordlengthlanguage。两者均已编入索引: Entity and attributes

我将 cdatamodel 和数据库复制到一个单独的导入器应用程序中,其中预填充了不同语言的约 400k 单词。我通过查看 SQLite 文件验证了导入,然后将预填充的数据库复制回 iPhone 项目。

首先我认为(简单)谓词是问题所在。但即使从获取请求中删除谓词后,执行时间也很长:

2011-09-01 09:26:38.945 MyApp[3474:3c07] Start
2011-09-01 09:26:58.120 MyApp[3474:3c07] End

这是我的代码:

// Get word
NSLog(@"Start");
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Words" inManagedObjectContext:appDelegate.managedObjectContext];
[fetchRequest setEntity:entity];

NSError *error = nil;
NSArray *fetchedObjects = [appDelegate.managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
//... error handling code
}

[fetchRequest release];
NSLog(@"End");
return fetchedObjects;

数据库中的条目数量是否是 Core Data 的问题?

<小时/>

编辑:正如 gcbrueckmann 和 jrturton 指出的那样,最好设置 fetchBatchSize。但获取时间仍然不令人满意:

  • 2 秒设置谓词:

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"length == %d AND language BEGINSWITH %@", wordLength, lng];[fetchRequest setPredicate:谓词];

  • 批量大小设置为 7 秒:

    [fetchRequest setFetchBatchSize:1];

  • 1 秒,同时设置谓词和批量大小

还有其他瓶颈吗?

最佳答案

由于您不以任何方式限制结果集,因此一次获取 400,000 个对象肯定会对 Core Data 造成负担。有多种方法可以提高性能:

更改获取请求的 fetchBatchSize限制一次提取将保留在内存中的对象数量。此功能对您的应用程序完全透明,因此绝对值得一试。

如果您不需要成熟的对象,您可以考虑更改获取请求的 resultType到更合适的值。特别是如果您只对对象的某些值感兴趣,那么使用 NSDictionaryResultType 是一个好主意。

最后是fetchLimitfetchOffset如果您想自己管理批处理,属性允许您限制结果范围。如果您对每个结果对象的处理使用大量内存,那么这是一个好主意,因为您可以将每个批处理包装在 NSAutoreleasePool 中(只是不要试图为每个结果创建自动释放池)对象)。

我猜1秒。即使您使用普通的 Sqlite 数据库,速度也可能与您的情况一样快。我能想到的唯一进一步优化是每种语言使用一个表(而不是将所有语言的单词放入一个表中)。当然,这仅适用于 Sqlite,除非您为所有语言定义单独的实体,即。 e.按原样获取您的 Words 实体并使其抽象。然后添加子实体,例如 EnglishWord 等。来自不同实体的对象存储在单独的表中。因此,结合 fetchBatchSizepredicate 参数,这应该类似于 Sqlite 方法,为所有语言提供单独的表。

关于iphone - 简单的核心数据获取非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7267418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com