我在一个C++程序中使用sqlite3数据库管理系统,主要用于将文件存储为blob对象(我知道这不是最好的选择)。显然,由于它们有时会很大(40-80MB),因此我会逐步地写入它们,为此我必须首先使用绑定函数
我面临的问题是,在创建blob占位符时(在
sqlite3_bind_zeroblob(...)
创建一个占位符,然后打开blob进行递增式写入和读取。我面临的问题是,在创建blob占位符时(在
sqlite3_step
期间),我的应用程序的RAM消耗会在2-3秒内达到80-160MB,一旦创建完成,RAM消耗就会回到2-3MB左右。我不知道为什么!如果他们已经创造了一种逐步写入blob的方法,那么一定有一种方法可以创建那个愚蠢的占位符而不浪费160MB的RAM,但我没有找到。你有什么建议吗?sqlite3_stmt* stm = NULL;
sqlite3_blob *BLOB = NULL;
rc = sqlite3_prepare_v2(db, sql.c_str(), -1, &stm, NULL);
rc = sqlite3_bind_blob(stm, 1, wpath.c_str(), wpath.size()*sizeof(wchar_t), SQLITE_STATIC);
rc = sqlite3_bind_text(stm, 2, hash.c_str(), hash.size(), SQLITE_STATIC);
rc = sqlite3_bind_zeroblob(stm, 3, size);
rc = sqlite3_bind_int(stm, 4, versione);
rc = sqlite3_bind_blob(stm, 5, last.c_str(), last.size()*sizeof(wchar_t), SQLITE_STATIC);
rc = sqlite3_step(stm);
if (rc != SQLITE_DONE) {
fprintf(stderr, " This file was already present in the database!\n", rc);
return;
}
else {
fprintf(stdout, "Record FILE created successfully\n");
}