繁体   English   中英

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

[英]How do I improve performance of Core Data object insert on iPhone?

我正在尝试将大量数据导入到iPhone上的核心数据存储中。 我正在使用SQLite支持核心数据存储。 这似乎比我预期的要长。 我已经减少了例程,因此它基本上只是尝试获取一个对象(看它是否已经存在)然后创建一个新对象(如果它没有)(他们从来没有这样做,因为我导入数据)。 但是,提取并不是耗时的部分。 这是对象的创建。 基本上,违规代码是:

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

我注意到在模拟器上,它开始时相当快,大约有100个对象创建了一秒钟。 它虽然减慢了,但是当创建五千个对象时,对于100个对象几乎是2秒,并且当创建一万个对象时,每100个对象为4秒。 整组21000个对象需要10分钟以上。 这就是取出所有实际有用的代码(这只是一个fetch和一个对象创建)。 它在实际设备上要慢很多(可能是4倍)。

我不明白的是为什么核心数据快速启动但随后开始减速。 我已经尝试了索引和我的数据没有索引。 我已经尝试创建自己的自动释放池,我会定期在循环中耗尽。 我在每个对象创建后都尝试过保存。 我试过等到最后才能保存。 但无论我做什么,表现仍然看起来很悲惨。 将新对象添加到核心数据存储中并且其中包含几千个对象,是否会很慢? 有什么建议么?

它可以很快,但这取决于你在做什么。 正如其他人所建议你应该看看仪器并找到实际的热点。 发布实际的导入代码也有助于识别问题。

我也有这个问题。 我正在从远程数据存储中导入100,000个简单对象,并且已经按照Apple关于批量导入的说明进行操作。 前几批(每批2000个对象)开始合理,然后保存缓慢爬行。

我已将数据进一步划分为50个批次,但仍然很慢。 仪器显示每次保存时间越来越长。 不知道为什么,我正在为每个批处理创建一个新的上下文,并且撤消管理器设置为nil。

不幸的是,我没有任何有用的东西可以添加到这个对话中...... 稍后会更新。

尝试使用仪器。 插入每个对象后不保存吗? 实际上,更多与插入相关的代码和方案可能非常有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM