【发布时间】:2011-07-14 08:18:22
【问题描述】:
我正在检查我创建的应用程序的内存使用情况。它多次调用从数据库读取值和从数据库中写入值(SQLite 3)。我观察到以下情况:
QSqlQuery::exec() 使用一些 KB 的 RAM 来执行给定的查询,但在超出范围后不会释放内存。
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());
}
但是,仍有少量内存没有释放。有没有其他人经历过这样的事情?
我可以如何释放这段记忆吗?
附:这里也发生了同样的情况,一些内存永远不会被释放:
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();
【问题讨论】: