SQLite异常内存使用

时间:2010-11-08 10:56:37

标签: sqlite memory memory-management

我们正在尝试将SQLite集成到我们的应用程序中,并尝试将其填充为缓存。我们计划将其用作内存数据库。第一次使用它。我们的应用程序是基于C ++的。

我们的应用程序与主数据库交互以获取数据并执行大量操作。这些操作通常涉及一个相当大的表。 我们在SQLite中复制了这个表,以下是观察结果:

字段数:60 记录数:1,00,000

随着数据量的增加,应用程序的内存从120MB大幅增加到大约1.4 GB。此时我们的应用程序处于空闲状态,没有进行任何主要操作。但通常情况下,一旦操作开始,内存利用率就会上升。现在使用SQLite和Memory DB这样的高内存使用量,我们认为我们不能支持这些记录。

问。有没有办法在内存中找到数据库的大小?

当我在磁盘上创建数据库时,数据库大小总和为~40MB。但仍然应用程序的内存使用率仍然很高。 的 Q值。是否有这种高使用率的原因。在数据库不在内存之前,所有缓冲区都已清除,如上所述?

任何帮助都将深表感谢。

谢谢和问候 萨钦

2 个答案:

答案 0 :(得分:0)

想到几个问题......

每条记录的大小是多少?

您的平台是否有内存泄漏检测工具?

我在一些资源受限的环境中使用SQLite的方式与您使用它的方式类似,并且在修复错误之后它很小,稳定且快速。 IIRC目前还不清楚何时清理SQLite API使用的某些东西,当我们使用工具查找内存泄漏时,很容易看出问题所在。

答案 1 :(得分:0)

见:

PRAGMA shrink_memory

该pragma通过调用sqlite3_db_release_memory()使调用它的数据库连接释放尽可能多的内存。