我正在尝试将大量数据导入 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/