在iOS中删除sqlite数据库中的记录不会减少数据库大小

时间:2015-06-05 03:41:21

标签: ios database sqlite memory size

我正在尝试通过在我的iOS应用程序中删除我的sqlite数据库中的记录来减小数据库的大小,但是大小将保持不变(与数据库关联的所有文件的大小,即.sqlite文件, .sqlite-shm文件和.sqlite-wal文件)。我已经读过这是预期的行为(参考:change sqlite file size after "DELETE FROM table")。此链接建议使用sqlite“vacuum”工具,这应该清理未使用的内存片段。但是,通过执行此操作,这会在磁盘内存(更具体地说,.sqlite-wal文件)的回滚中分配大量内存。所以这没有用,因为与数据库关联的文件的总大小没有减少。

我想知道在这种情况下是否有人知道该怎么办?任何帮助表示赞赏。

由于

JB

1 个答案:

答案 0 :(得分:0)

您可以在持久性商店协调员的初始化中禁用Write ahead logging(sqlite-wal)(通常在appdelegate中)(检查堆栈溢出或谷歌)。这意味着对SQL数据库所做的任何更改都会立即反映在您设备上的磁盘上,就像您期望的那样。

它可能看起来像这样:

 if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                               configuration:nil
                                                         URL:storeURL
                                                     options:@{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES, NSSQLitePragmasOption : @{@"journal_mode" : @"DELETE"}}
                                                       error:&error])