0

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

有什么办法可以:

  1. 将预填充的实体加载到 CoreData
  2. 将预填充的数据库(所有实体)加载到 CoreData
  3. 沿着这些思路可以显着加快数据的插入速度

谢谢。

4

3 回答 3

1

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

于 2013-10-22T14:36:17.707 回答
1

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

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

于 2013-10-22T14:37:51.057 回答
0

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

但是,为了记录,15分钟是荒谬的。我可以关闭以保证您可以将其缩短到几秒钟。

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

  • 禁用撤消管理器,
  • 使用后台线程@autoreleasepool
  • 以完全正确的批量大小定期保存(通过实验确定)。
于 2013-10-22T20:54:09.203 回答