SQLite内存使用异常

SQLite内存使用异常,sqlite,memory,memory-management,Sqlite,Memory,Memory Management,我们正在尝试将SQLite集成到我们的应用程序中,并尝试将其填充为缓存。我们计划将其用作内存中的数据库。第一次使用它。我们的应用程序是基于C++的. 我们的应用程序与主数据库交互以获取数据并执行大量操作。这些操作通常涉及一个非常大的表。 我们在SQLite中复制了该表,观察结果如下: 字段数:60 记录数:100000 随着数据填充的开始,应用程序的内存从120MB急剧增加到~1.4GB。此时,我们的应用程序处于空闲状态,没有执行任何主要操作。但通常,一旦操作开始,内存利用率就会上升。现在有了S

我们正在尝试将SQLite集成到我们的应用程序中,并尝试将其填充为缓存。我们计划将其用作内存中的数据库。第一次使用它。我们的应用程序是基于C++的.</P> 我们的应用程序与主数据库交互以获取数据并执行大量操作。这些操作通常涉及一个非常大的表。 我们在SQLite中复制了该表,观察结果如下:

字段数:60 记录数:100000

随着数据填充的开始,应用程序的内存从120MB急剧增加到~1.4GB。此时,我们的应用程序处于空闲状态,没有执行任何主要操作。但通常,一旦操作开始,内存利用率就会上升。现在有了SQLite作为内存数据库和这种高内存使用率,我们认为我们无法支持这么多记录

当数据库在内存中时,有没有办法找到它的大小

当我在磁盘上创建DB时,DB大小总计约为40MB。但应用程序的内存使用率仍然很高。 这种高使用率有什么原因吗。所有缓冲区都已清除,如前所述,DB不在内存中

任何帮助都将不胜感激

谢谢和问候
萨钦

我想到了几个问题

每个记录的大小是多少

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

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

请参见:

PRAGMA收缩内存


这个pragma通过调用sqlite3\u db\u release\u memory,使调用它的数据库连接释放尽可能多的内存。

它应该达到1K。我还需要运行Purify,但这里的要点是,由于DB不在内存中,而是在磁盘上,所以内存应该很低。不应该这样吗。如果内存使用率如此之高,那么最好创建内存中的DB?Hi,奇怪的行为。我没有找到内存泄漏程序。但我试过一件事。一旦内存增加,我就会尝试关闭数据库。记忆只有轻微的减少。我甚至放下桌子,然后关闭数据库,但内存仍然很高。我怎样才能让sqlite释放获得的内存?@chingupt一年后,我遇到了与您相同的问题。似乎SQLite在处理完内存后不会释放内存。例如,我创建了一个巨大的表,我对它执行了一个select操作,并将其放入内存中。它从不干净。即使删除了表,内存使用也不会减少。