私が作ったアプリケーションのメモリ使用量をチェックしています。データベースとの間で値の読み書きを行うための多数の呼び出しを行います(SQLite 3)。私は、次のことを観察しました:QSqlQueryメモリの問題。 QSqlQuery :: exec()とQSqlDatabase :: open()/ close();
QSqlQuery :: EXEC()は、特定のクエリを実行するためにRAMのいくつかのKBを使用しますが、それはスコープの外に出た後、メモリを解放しません。
QSqlDatabase :: open()& close()ドキュメントが示すように、リソースを解放するのに役立ちません。もしあれば、close()はリソース(少なくともメモリ)をヒープ/スタック上に「トラップされた」ままにします。
たとえば、私のデータベースにアクセスするために使用していた典型的なコードセグメントを次に示します。で実験した
QStringList values;
db.open();
QString strQuery = "SELECT DISTINCT " + field + " FROM " + table + str;
QSqlQuery query(db);
query.prepare(strQuery);
if(query.exec() == true)
{
while(query.next())
{
values.push_back(query.value(0).toString());
}
}
db.close();
私は「トラップ」以下のコードに少ないメモリを見つける:
QStringList values;
QString strQuery = "SELECT DISTINCT " + field + " FROM " + table + str;
QSqlQuery query(strQuery, db);
while(query.next())
{
values.push_back(query.value(0).toString());
}
しかし、少量のメモリがまだリリースされていません。他に誰もこのようなことを経験していますか?
このメモリを解放する方法はありますか?
p.s.同じことは、いくつかのメモリが解放されることはありません、ここで起こる:
db.open();
QSqlQuery query(db);
query.exec("DELETE FROM table1");
query.exec("DELETE FROM table2");
query.exec("DELETE FROM table3");
query.exec("DELETE FROM table4");
...
db.close();
ここでは、メモリはクエリで削除されません。問題はメモリリークと同じです。 –