iphone - 如何提高 iPhone 上 Core Data 对象插入的性能?

标签 iphone performance core-data

我正在尝试将大量数据导入 iPhone 上的核心数据存储中。我使用 SQLite 支持核心数据存储。似乎花费的时间比我预期的要长。我已经精简了例程,以便它基本上只是尝试获取一个对象(查看它是否已经存在),然后如果不存在则创建一个新对象(因为我正在导入数据,所以它们从不这样做)。不过,获取并不是最耗时的部分。这是对象的创建。基本上,有问题的代码是:

MobileObject *newObject = (MobileObject *)[NSEntityDescription insertNewObjectForEntityForName:objDesc inManagedObjectContext:managedObjectContext];

我注意到在模拟器上,一开始速度相当快,每秒创建大约 100 个对象。但速度会变慢,当创建 5000 个对象时,创建 100 个对象几乎需要 2 秒,当创建 10000 个对象时,每 100 个对象需要 4 秒。整个组21000个物体需要10多分钟。也就是说,所有实际有用的代码都被删除了(这只是一个获取和一个对象创建)。而且在实际设备上速度要慢得多(可能慢 4 倍)。

我不明白的是为什么核心数据开始时速度很快,但随后开始变慢。我已经尝试过在数据上使用索引和不使用索引。我尝试创建自己的自动释放池,并定期在循环中耗尽该池。我尝试在每次创建对象后进行保存。我试过等到最后保存。但无论我做什么,表现仍然显得很惨。将新对象添加到包含几千个对象的核心数据存储中真的那么慢吗?有什么建议吗?

最佳答案

它可能非常快,但这取决于您在做什么。正如其他人建议的那样,您应该查看仪器并找到实际的热点。另外发布实际的导入代码将有助于识别问题。

关于iphone - 如何提高 iPhone 上 Core Data 对象插入的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3559599/

相关文章:

iphone - iOS 应用程序的应用程序委托(delegate)是否需要保留 UIWindow?

c++ - 编译器会优化掉未使用的链接文件吗?

javascript - 将数组合并为一个

ios - (NSFetchedResultsController) : couldn't read cache file to update store info timestamps

ios - 核心数据推导表达式键路径使用运算符作为中间组件

iphone - iOS: locationManager:didUpdateToLocation:fromLocation: 不移动时报告速度

iphone - 在摇动手势上做 IBAction

ios - 核心数据删除不起作用

python-3.x - LU 分解速度与传统 Ax=b 的比较

iphone - 核心数据`deleteObject:`问题!