ios – Core Data sqlite-wal文件在插入〜5000行时会获得MASSIVE(> 7GB)

前端之家收集整理的这篇文章主要介绍了ios – Core Data sqlite-wal文件在插入〜5000行时会获得MASSIVE(> 7GB)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我将数据导入Core Data,发现保存操作很慢.使用iOS模拟器,我看到sqlite-wal文件的增长和增长,直到其超过7GB的大小.

我输入约5000个记录,约10个字段.这不是很多的数据.

我插入的每个对象与各种其他对象(总共6个关系)具有一对一的关系.所有这些记录合计少于20个字段.没有图像或任何二进制数据或任何可以看到的东西,这将证明为什么WAL文件的最终大小是如此之大.

我读了描述wal文件sqlite文档,我看不出这可能如何发生.源数据不超过50 MB.

我的应用程序是多线程的.
我在执行导入(创建和保存核心数据对象)的后台线程中创建一个托管对象上下文.

没有在这里编写代码,有没有人遇到这个?任何人都有一个想法,我应该检查什么.代码不是超级简单,所有的部分都需要时间来输入,所以让我们从一般的想法开始.

我会让任何让我走向正确的人.

额外信息:

>我已经禁用了撤销管理器的上下文,因为我不需要(我认为默认情况下在iOS上是零,但我显式设置为nil).
>我只在整个循环完成之后调用保存,所有被管理的对象都在ram中(ram达到100 MB btw).
>核心数据对象的循环和创建只需要5秒左右.在写入文件时,保存需要花费近3分钟的时间.

解决方法

似乎我的评论尝试使用旧的回滚(DELETE)日记帐模式而不是WAL日记帐模式来解决问题.请注意,使用WAL日记帐模式时,似乎存在一系列问题,包括以下内容

>这个问题
>使用migratePersistentStore API时数据库迁移的问题
>轻量级迁移的问题

也许我们应该启动一个核心数据WAL问题页面,并获得一个全面的列表,并要求苹果修复错误.

请注意,OS X 10.9和iOS 7下的默认模式现在使用WAL模式.要更改此选项,请添加以下选项

@{ NSsqlitePragmaOptions : @{ @"journal_mode" : @"DELETE" } }

猜你在找的iOS相关文章