我的应用程序正在使用带有SQLite的CoreData,我最近注意到使用大型数据库(240MB)需要一些时间来加载。
我发现在加载过程中会创建一个日志文件,然后将其删除。 阅读这篇文章:What causes a journal file to be created in SQLite?,它表示当事务开始能够回滚时创建日记。
在我的情况下,我只做一个选择(没有更新或插入),所以我不明白为什么要创建这个日志文件。
你有什么想法吗?
非常感谢你的帮助。
亨利
答案 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,每次打开数据存储时都会执行真空。