gpt4 book ai didi

c++ - QSqlQuery 内存问题。 QSqlQuery::exec() 和 QSqlDatabase::open()/close();

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:48:23 29 4
gpt4 key购买 nike

我正在检查我创建的应用程序的内存使用情况。它进行多次调用以从数据库 (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();

最佳答案

看来,为了释放这个内存,你必须创建 QSqlQuery 变量作为指针,并在关闭数据库之前删除这个指针:

QStringList values;
db.open();
QString strQuery = "SELECT DISTINCT " + field + " FROM " + table + str;

QSqlQuery *query = new QSqlQuery(db);
query->prepare(strQuery);

if(query->exec() == true)
{
while(query->next())
{
values.push_back(query->value(0).toString());
}
}

delete query;
db.close();

然后在数据库关闭后释放内存。

关于c++ - QSqlQuery 内存问题。 QSqlQuery::exec() 和 QSqlDatabase::open()/close();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6690341/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com