加载我的应用程序时为什么要创建sqlite日志文件(在选择时)

时间:2014-03-05 18:38:58

标签: ios sqlite core-data

我的应用程序正在使用带有SQLite的CoreData,我最近注意到使用大型数据库(240MB)需要一些时间来加载。

我发现在加载过程中会创建一个日志文件,然后将其删除。 阅读这篇文章:What causes a journal file to be created in SQLite?,它表示当事务开始能够回滚时创建日记。

在我的情况下,我只做一个选择(没有更新或插入),所以我不明白为什么要创建这个日志文件。

你有什么想法吗?

非常感谢你的帮助。

亨利

3 个答案:

答案 0 :(得分:0)

核心数据在您获取对象时会触及对象。我们无法直接访问Core Data内部版本控制。它使用此信息进行合并,陈旧等。

简短回答,它是SEP(别人的问题)并且是核心数据的内部。

答案 1 :(得分:0)

使用WAL模式。这将避免默认创建的巨大日记。在WAL模式下,日志已创建,但其大小根据您的需要而定。在你的情况下,它会很小,因为你没有写很多东西。 只需在创建数据库时执行一次查询:PRAGMA journal_mode = WAL;。如果在创建后执行,则可能在先前的数据库存在时抛出错误。 请注意,WAL与以前的日记帐类型不兼容,并且受3.7.3。

支持

答案 2 :(得分:0)

感谢您的回答。我的问题与NSSQLiteManualVacuumOption有什么关系。 打开商店时我添加:

[NSNumber numberWithBool:appHasBeenUpdated],NSSQLiteManualVacuumOption

仅当安装了新更新时,appHasBeenUpdated才会设置为YES。问题是,即使appHasBeenUpdated设置为NO,每次打开数据存储时都会执行真空。