使用所有系统内存的MySQL C++连接器

使用所有系统内存的MySQL C++连接器,c++,mysql,connector,C++,Mysql,Connector,这段代码看起来像是使用了所有的系统内存。为什么会这样 sql::Statement *Query; sql::ResulSet *Result; while(1){ Query = con->createStatement(); Result = Query->executeQuery("SELECT `Some` FROM `Table` LIMIT 1"); Result->next(); Result->close(); Query-

这段代码看起来像是使用了所有的系统内存。为什么会这样

sql::Statement *Query;
sql::ResulSet *Result;
while(1){
   Query = con->createStatement();
   Result = Query->executeQuery("SELECT `Some` FROM `Table` LIMIT 1");
   Result->next();
   Result->close(); 
   Query->close();
   cout << "console message..." << endl;
   //delete Query; SEGFAULT
}
如果我注释了除cout之外的所有行,那么内存就不会被填满。但是使用SQL看起来像Query=con->createStatement;不替换旧的查询值,结果=bla;没有替换旧值

createStatement和executeQuery正在创建新对象,这些对象是存储在查询和结果中的对象。除非明确删除它们,否则它们将保留在内存中

到你的循环


顺便说一句,这与示例代码一起出现在连接器文档中。

看起来没有关于谷歌的信息。我发现了问题所在

正如SJuan76所说,对createStatement和executeQuery的每次调用都是一个新对象

所以我开始做了很多尝试,我发现了以下几点

只使用一次createStatement 在删除结果之前,请检查它是否打开和关闭 删除Respuesta 有时,只在程序结束时删除con和Query自动提醒您的朋友 因此,让永远运行的程序始终使用相同内存的代码应该如下所示

sql::Statement *Query;
sql::ResulSet *Result;
Query = con->createStatement();
while(1){
 if(!Result->isClosed()) Result->close();
 delete Result;
 Result = Query->executeQuery("SELECT `Some` FROM `Table` LIMIT 1");
 Result->next();
 cout << "console message..." << endl;
}

在循环结束时添加delete查询就在cout生成segfaults之后这是我使用的参考,我不知道有什么可能会让您感到不安。是的,我有一个删除,如果出于任何原因循环必须中断。是的,我有一个删除,如果出于任何原因循环必须中断。但它是一个持久性程序,它必须永远运行,并且看起来没有一个擦除方法或干净方法来清除sql::Statement和sql::ResultSelt未使用的保留内存。这两个方法都有问题,请关闭;无论出于何种原因,它都会减慢内存速度,但在经过10000次循环后,它将使用4倍的内存,在不到1小时的时间内,它将使用1gB内存。我找不到文档,唯一的想法是使用语句向量和其他结果集并删除before条目。。。肮脏的修理。谢谢你的时间
sql::Statement *Query;
sql::ResulSet *Result;
Query = con->createStatement();
while(1){
 if(!Result->isClosed()) Result->close();
 delete Result;
 Result = Query->executeQuery("SELECT `Some` FROM `Table` LIMIT 1");
 Result->next();
 cout << "console message..." << endl;
}