SQLite内存消耗 - 为什么这么高?

时间:2015-01-16 06:47:51

标签: c++ performance sqlite memory memory-leaks

我有一个c ++应用程序(Winx64),我正在进行原型设计,我注意到当数据库本身在磁盘上为200MB时,使用SQLite时的内存消耗大小为6GB。如果我删除所有执行数据库函数的语句,我的应用程序永远不会超过700MB(其中包括要从内部缓冲区加载到SQL中的数据)。

这是我正在做的事情:

  • 创建数据库
  • 创建10个表
  • 加载包含131.8万行的表
  • 原始数据大小为578MB

我关闭了日记功能。 同步已关闭。

我正在为插入使用准备好的SQL语句。 每次提交的批量大小为1000条记录 每次提交后,我手动运行PRAGMA shrink_memory和VACUUM

sqlite3_memory_highwater仅显示1.1GB,sqlite3_memory_used显示700mb。

在程序结束时,我运行_CrtDumpMemoryLeaks();并且它没有显示内存泄漏(除了我的类初始化字符串)。

为什么SQLite使用6GB的RAM(根据工作集和专用字节的性能监视器)?

我甚至尝试过这些方法,以确保它不会在我的构造函数中被阻止:

int main(void)
{
    dbClass *db = new dbClass("Sample.db");
    DoWork();
    delete db;
    _CrtDumpMemoryLeaks();
    cin.get();
}

仍然显示已分配5GB。

我错过了什么?

0 个答案:

没有答案
相关问题