我是 SQLite 的新手。我尝试通过 C/C++ 接口(interface)创建数据并将其插入给定数据库。问题是当我运行程序时内存不断增加。插入的数据越多,使用的内存就越多。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
#include <string.h>
using namespace std;
void execute(char* sql, sqlite3 *&db)
{// execute a command
sqlite3_stmt *stm = NULL;
int rc = 0;
rc = sqlite3_prepare_v2(db,sql,-1,&stm,NULL);
rc = sqlite3_step(stm);
sqlite3_finalize(stm);
stm = NULL;
return;
}
int main()
{
char *tam = new char[256];
sqlite3* db;
sqlite3_open("bangso.db",&db);
sprintf(tam,"COMMIT;");
execute(tam,db);
sprintf(tam,"PRAGMA synchronous=OFF;");
execute(tam,db);
sprintf(tam,"PRAGMA count_changes=OFF;");
execute(tam,db);
sprintf(tam,"PRAGMA journal_mode=MEMORY;");
execute(tam,db);
sprintf(tam,"PRAGMA temp_store=MEMORY;");
execute(tam,db);
sprintf(tam,"BEGIN;");
execute(tam,db);
for(int i=0;i<10000;i++){
sprintf(tam,"insert into bangso(id,so) values(%d,%d);\n",i+1,i);
execute(tam,db);
sprintf(tam,"create table a%d(id int);\n",i);
execute(tam,db);
if(i%1000==0) printf("> %d\n",int(sqlite3_memory_used()));
}
sprintf(tam,"COMMIT;");
execute(tam,db);
sqlite3_close(db);
delete [] tam;
tam = NULL;
}
我觉得函数sqlite3_finalize并没有释放所有内存。谢谢。
最佳答案
SQLite 库将所有表的元数据保存在内存中。当您的数据库有 10000 个表时,您会耗尽这 10000 个表的内存。
关于c++ - SQLite C/C++ 接口(interface) : memory increasing while insert data into table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45149404/