我正在将数据导入Core Data并发现保存操作很慢。使用iOS模拟器,我看到sqlite-wal文件增长并增长,直到它的大小超过7GB。
我正在导入大约10个字段的大约5000条记录。这不是很多数据。
我插入的每个对象与各种其他对象具有一对一的关系(总共6个关系)。所有这些记录合计不到20个字段。没有任何图像或任何二进制数据或任何我能看到的东西可以证明为什么WAL文件的结果大小如此巨大。
我阅读了描述wal文件的sqlite文档,但我不知道这是怎么发生的。源数据不超过50 MB。
我的应用程序是多线程的。 我在后台线程中创建一个托管对象上下文来执行导入(创建并保存核心数据对象)。
没有在这里编写代码,有没有人遇到过这个?任何人都想过我应该检查什么。代码不是非常简单,所有部分都需要时间在这里输入,所以让我们从一般的想法开始。
我会相信任何能让我朝着正确方向前进的人。
额外信息:
- 我已经禁用了上下文的撤消管理器,因为我不需要它(我认为默认情况下它在iOS上是零,但我明确地将其设置为nil)。
- 我只在整个循环完成后调用save并且所有托管对象都在ram中(ram上升到100 MB btw)。
- 循环和创建核心数据对象只需要5秒左右。写入awl文件时保存大约需要3分钟。