我通过FMDB包装器在我的应用程序中使用sqlite。
在调用VACUUM之前,我的应用中的内存使用量为2.25 MB:
[myFmdb executeUpdate: @"VACUUM;" ];
后来它在5.8 MB,我似乎无法收回内存。在真空后,仪器/分配工具显示大量带有活字节的sqlite3MemMalloc调用,每个调用分配1.5 K.
如果没有关闭数据库并重新打开它(一个选项),我该如何清理它呢?
编辑:关闭并重新打开数据库连接会清除内存。这是我的解决方案,除非有人能够对此有进一步的了解。
答案 0 :(得分:2)
我在sqlite-users列表中发布了这个问题并得到了一个响应,建议减少sqlite的缓存大小。这是通过执行以下语句(根据需要调整大小值)来完成的:
pragma cache_size = 100
编辑:这是释放SQLite内存的另一个好方法。一定要#define SQLITE_ENABLE_MEMORY_MANAGEMENT。
此处记录:http://www.sqlite.org/c3ref/release_memory.html
int bytesReleased = sqlite3_release_memory( 0x7fffffff );
NSLog( @"sqlite freed %d bytes", bytesReleased );