我将数据导入Core Data,发现保存操作很慢.使用iOS模拟器,我看到sqlite-wal文件的增长和增长,直到其超过7GB的大小.
我输入约5000个记录,约10个字段.这不是很多的数据.
我插入的每个对象与各种其他对象(总共6个关系)具有一对一的关系.所有这些记录合计少于20个字段.没有图像或任何二进制数据或任何可以看到的东西,这将证明为什么WAL文件的最终大小是如此之大.
我读了描述wal文件的sqlite文档,我看不出这可能如何发生.源数据不超过50 MB.
我的应用程序是多线程的.
我在执行导入(创建和保存核心数据对象)的后台线程中创建一个托管对象上下文.
没有在这里编写代码,有没有人遇到这个?任何人都有一个想法,我应该检查什么.代码不是超级简单,所有的部分都需要时间来输入,所以让我们从一般的想法开始.
我会让任何让我走向正确的人.
额外信息:
>我已经禁用了撤销管理器的上下文,因为我不需要(我认为默认情况下在iOS上是零,但我显式设置为nil).
>我只在整个循环完成之后调用保存,所有被管理的对象都在ram中(ram达到100 MB btw).
>核心数据对象的循环和创建只需要5秒左右.在写入文件时,保存需要花费近3分钟的时间.
解决方法
@H_403_24@ 似乎我的评论尝试使用旧的回滚(DELETE)日记帐模式而不是WAL日记帐模式来解决问题.请注意,使用WAL日记帐模式时,似乎存在一系列问题,包括以下内容:>这个问题
>使用migratePersistentStore API时数据库迁移的问题
>轻量级迁移的问题
也许我们应该启动一个核心数据WAL问题页面,并获得一个全面的列表,并要求苹果修复错误.
请注意,OS X 10.9和iOS 7下的默认模式现在使用WAL模式.要更改此选项,请添加以下选项
@{ NSsqlitePragmaOptions : @{ @"journal_mode" : @"DELETE" } }