保存

时间:2015-07-30 11:11:14

标签: ios sqlite core-data

我正在使用NSSqliteStoreType的核心数据在我的iOS应用中存储数据。 我需要将大量对象存储到数据库中。 为了提高Core数据的性能,我考虑了很多因素:

  1. 明确保存
  2. 仅在for循环结束后保存
  3. 清除上下文以管理内存
  4. 但是节省10万件物品需要花费很多时间。请建议我在保存大量数据的同时提高Core数据性能的最佳实践。

2 个答案:

答案 0 :(得分:2)

  1. 您应该在非UI线程上进行导入,其中上下文直接绑定到持久性存储协调器,而不是主要上下文的子上下文
  2. 您应该在插入的每几百个新对象中调用[managedObjectContext save]一次,具体取决于对象大小和图形复杂性。有关详细信息,请参阅this answer
  3. 您应该将您的批处理从步骤2中包装在@autoreleasepool块中,并在保存之后重置上下文,然后退出自动释放块。请参阅this answer

答案 1 :(得分:0)

您应考虑使用预先填充的数据运送您的应用,以避免导入的大部分开销。假设数据足够静态(大多数数据),您可以预先加载所有数据,直到发布应用程序,然后当应用程序启动时,它只需要从发货日期(或上次刷新日期)中获取数据向前)。

正如Leonid Usov所说,您还应该在后台上下文中导入并批量保存到磁盘。这将有助于保持内存下降和UI性能提升。但是在数据结束时,导入大量数据非常密集,应尽可能通过预加载来避免。