将数据库直接加载到Core Data中

时间:2013-10-22 14:26:02

标签: iphone ios objective-c core-data ios6

是否可以直接将数据库/实体加载到CoreData中?该应用程序依赖于数据,初始数据加载是> 100,000件物品。在iPhone 4上完成插入需要大约15分钟,这是一个令人不快的长时间。

我有什么办法可以:

  1. 将预先填充的实体加载到CoreData
  2. 将预先填充的数据库(所有实体)加载到CoreData
  3. 这些方面的东西     使数据的插入速度更快
  4. 感谢。

3 个答案:

答案 0 :(得分:1)

使用CoreData创建数据库并将其添加到项目包中,然后在第一次加载时,将数据库从包复制到文件系统,以便它可写,然后从那里打开它。您可能希望将数据库标记为不根据需要与iCloud共享。

答案 1 :(得分:1)

是的,这是可能的。 “正常”方法是预构建数据库,将其作为资源包含,检查启动时是否在文档文件夹中有数据库,如果没有,则从包中复制它。

我通常运行我的代码在模拟器上构建数据库,然后从sim文件夹中复制它并添加到我的项目资源中。

答案 2 :(得分:0)

通过应用程序包复制预先制作的Core Data生成的sqlite文件是一个好主意,即使我觉得它有点麻烦。如果你有静态数据存储和动态数据存储,这是最有意义的 - 在大多数情况下,复制静态数据是可行的。

但是,据记载,15分钟是荒谬的。我可以保证你可以把它减少到几秒钟。

我已经能够在第一代iPad上在不到30秒的时间内完成500K插入。最重要的优化技术是:

  • 禁用撤消管理器,
  • 使用后台主题@autoreleasepool
  • 使用恰当的批量大小定期保存(通过实验确定)。