2

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

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

[myFmdb executeUpdate: @"VACUUM;" ];

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

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

编辑:关闭并重新打开数据库连接确实会清除内存。这是我的解决方案,除非有人可以对此有所了解。

4

1 回答 1

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 );
于 2011-03-09T19:56:48.117 回答