sqlite + fmdb vacuum命令后的内存泄漏(?)

时间:2011-03-08 22:17:19

标签: ios sqlite fmdb

我通过FMDB包装器在我的应用程序中使用sqlite。

在调用VACUUM之前,我的应用中的内存使用量为2.25 MB:

[myFmdb executeUpdate: @"VACUUM;" ];

后来它在5.8 MB,我似乎无法收回内存。在真空后,仪器/分配工具显示大量带有活字节的sqlite3MemMalloc调用,每个调用分配1.5 K.

如果没有关闭数据库并重新打开它(一个选项),我该如何清理它呢?

编辑:关闭并重新打开数据库连接会清除内存。这是我的解决方案,除非有人能够对此有进一步的了解。

1 个答案:

答案 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 );