我正在尝试将大量数据导入到iPhone上的核心数据存储中。我正在使用SQLite支持核心数据存储。这似乎比我预期的要长。我已经减少了例程,因此它基本上只是尝试获取一个对象(看它是否已经存在)然后创建一个新对象(如果它没有)(他们从来没有这样做,因为我导入数据)。但是,提取并不是耗时的部分。这是对象的创建。基本上,违规代码是:
MobileObject *newObject = (MobileObject *)[NSEntityDescription insertNewObjectForEntityForName:objDesc inManagedObjectContext:managedObjectContext];
我注意到在模拟器上,它在开始时相当快,大约有100个对象创建了一秒钟。它虽然减慢了,但是当创建五千个对象时,对于100个对象几乎是2秒,并且当创建一万个对象时,每100个对象为4秒。整组21000个对象需要10分钟以上。这就是取出所有实际有用的代码(这只是一个fetch和一个对象创建)。它在实际设备上要慢很多(可能是4倍)。
我不明白为什么核心数据快速启动但随后开始减速。我已经尝试了索引和我的数据没有索引。我已经尝试创建自己的自动释放池,我会定期在循环中耗尽。我在每个对象创建后都尝试过保存。我试过等到最后才能保存。但无论我做什么,表现仍然看起来很悲惨。将新对象添加到核心数据存储中并且其中包含几千个对象,是否会很慢?有什么建议吗?
答案 0 :(得分:2)
它可以非常迅速,但这取决于你在做什么。正如其他人所建议你应该看看仪器并找到实际的热点。同时发布实际的导入代码有助于确定问题。
答案 1 :(得分:0)
尝试使用乐器。插入每个对象后不保存吗?实际上,更多与插入相关的代码和方案可能非常有用。
答案 2 :(得分:0)
我也有这个问题。我正在从远程数据存储中导入100,000个简单对象,并且已经按照Apple关于批量导入的说明进行操作。前几批(每批2000个对象)开始合理,然后保存缓慢爬行。
我已将数据进一步划分为50个批次,但仍然很慢。仪器显示每次保存时间越来越长。不知道为什么,我正在为每个批处理创建一个新的上下文,并且撤消管理器设置为nil。
不幸的是,我没有任何有用的东西可以添加到这个对话中。稍后会更新。