我有一个c ++应用程序(Winx64),我正在进行原型设计,我注意到当数据库本身在磁盘上为200MB时,使用SQLite时的内存消耗大小为6GB。如果我删除所有执行数据库函数的语句,我的应用程序永远不会超过700MB(其中包括要从内部缓冲区加载到SQL中的数据)。
这是我正在做的事情:
我关闭了日记功能。 同步已关闭。
我正在为插入使用准备好的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。
我错过了什么?