gpt4 book ai didi

c++ - SQLite C/C++ 接口(interface) : memory increasing while insert data into table

转载 作者:行者123 更新时间:2023-11-30 16:43:34 25 4
gpt4 key购买 nike

我是 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/

25 4 0