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

发布于 2024-10-20 19:38:38 字数 346 浏览 5 评论 0原文

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

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

[myFmdb executeUpdate: @"VACUUM;" ];

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

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

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

I'm using sqlite in my app via the FMDB wrapper.

Memory usage in my app sits at 2.25 MB before a call to VACUUM:

[myFmdb executeUpdate: @"VACUUM;" ];

Afterwords its at 5.8 MB, and I can't seem to reclaim the memory. Post-vacuum, the Instruments/Allocations tool shows tons of sqlite3MemMalloc calls with live bytes, each allocating 1.5 K.

Short of closing the database and reopening it (an option), how can I clean this up?

Edit: closing and reopening the database connection does clear up the memory. This is my solution unless someone can shed some further insight to this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

污味仙女 2024-10-27 19:38:38

我在 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 );

I posted this question on the sqlite-users list and got a response that suggested reducing the cache size for sqlite. This is done by executing the following statement (adjusting the size value as desired):

pragma cache_size = 100

EDIT: here's another nifty trick for releasing SQLite memory. Be sure to #define SQLITE_ENABLE_MEMORY_MANAGEMENT.

Documented here: http://www.sqlite.org/c3ref/release_memory.html

int bytesReleased = sqlite3_release_memory( 0x7fffffff );
NSLog( @"sqlite freed %d bytes", bytesReleased );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文