Я проверяю использование памяти приложением, которое я сделал. Он делает многочисленные вызовы для чтения и записи значений в базу данных и из нее (SQLite 3). Я заметил следующее:
QSqlQuery :: exec () использует некоторый КБ ОЗУ для выполнения данного запроса, но не освобождает память после того, как он выходит из области видимости.
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();