SQLite UPDATE内存使用情况

时间:2013-11-25 23:14:01

标签: c++ sqlite

我试图在Linux上的嵌入式C ++应用程序中使用简单的SQLite数据库。我有数据库在功能上工作,但是当我尝试更新表中的记录时,我似乎得到了奇怪的内存使用问题。运行此代码时,可用内存以看似不稳定的方式下降。我会发布一个情节,但我没有足够的声誉。

sqlite3 *db;

void UpdateValue(int TlmID, std::string Value)
{
     int rc;
     char *zErrMsg = 0;

     string sqlCommand = "UPDATE tlm SET t_val=\"" + Value + "\", t_time=strftime('%Y-%m-%d %H:%M:%f') where t_id=" + to_string(TlmID) + ";";

     rc = sqlite3_exec(db, sqlCommand.c_str(), NULL, 0, &zErrMsg);

     if( rc != SQLITE_OK )
     {
          #if DEBUG_LEVEL >= DEBUG_LEVEL_1
          cout<<"Error: "<<zErrMsg<<endl;
          #endif
          sqlite3_free(zErrMsg);
     }
     else
     {
          #if DEBUG_LEVEL >= DEBUG_LEVEL_2
          cout<<"Successfully updated tlm id "<<TlmID<<endl;
          #endif
     }
}

但是,如果我注释掉sqlite3_exec命令,那么无内存保持稳定。这让我觉得我错误地使用了sqlite3_exec命令。另外,我尝试在每个sqlite3_exec调用之前和之后关闭并打开数据库,但它没有效果。

我使用了sqlite3_status()来检查SQLITE_STATUS_MEMORY_USED,但是这些值在程序执行时没有改变。

我打开数据库连接:

 rc = sqlite3_open(DatabaseName.c_str(), &db);

我在做什么会导致此代码的内存消耗不稳定?非常感谢您的帮助。


更新:我使用的是SQLite版本3.6.2,这可能是问题所在,因为它太旧了。

更新:更新到3.8.1后问题仍然存在。


我测量了每个exec命令之前和之后的内存使用情况,并获得了一些有趣的结果。大约每四个exec命令61440字节被消耗并且不被释放。所有其他时间,在命令之前和之后都有相同数量的内存。

0 个答案:

没有答案