Russian Qt Forum

Qt => Базы данных => Тема начата: MyIQNegative от Июль 16, 2010, 09:13



Название: Увеличение потребления памяти, Qt + MySQL, утечка памяти?
Отправлено: MyIQNegative от Июль 16, 2010, 09:13
Добрового времени суток, друзья. Есть одна забавная ситуация. При создании коннекта к базе данных и выполнении QSqlQuery увеличивается потребляемая приложением память. С чем бы это могло быть связано.

Вот код тестовой функции:

Цитировать
void testFunction() {

    // имя базы данных
    QString DBname = "myDB";

    {
        // создание соединения с базой данных
        QSqlDatabase mainDB = QSqlDatabase::addDatabase("QMYSQL", DBname);
        
        // установление параметров соединения
        mainDB.setHostName(MainDBHostName);
        mainDB.setDatabaseName(MainDBDatabaseName);
        mainDB.setUserName(MainDBUserName);
        mainDB.setPassword(MainDBUserPass);

        // открытие базы данных
        if(!mainDB.open()) {
            sendLogMsg("cannot open database");
            sendLogMsg(mainDB.lastError().text());
            return;
        }
    }

    {
        // создание и выполнение запроса к БД
        // сам запрос увесистый, выборки 6000+ строк таблицы
        QSqlQuery tempQuery(QSqlDatabase::database(DBname));
        tempQuery.exec("select * from organisations");
        tempQuery.clear();
        tempQuery = 0;
    }

    // закрытие соединения с базой данных
    (QSqlDatabase::database(DBname)).close();
    QSqlDatabase::removeDatabase(DBname);

    qDebug() << "database deleted";
}

Суть в том, что моему приложению нужно будет временно создавать соединение к БД, затем выполнять запросы и удалять соединение. Постоянно поддерживать его нельзя. Как же быть, если потребляемая память постепенно увеличивается. 200 вызовов такой функции увеличивают потребление на 200кб. На что? Помогите разобраться, пожалуйста.


Название: Re: Увеличение потребления памяти, Qt + MySQL, утечка памяти?
Отправлено: MyIQNegative от Июль 18, 2010, 18:50
Неужто ни у кого нет никаких предположений?


Название: Re: Увеличение потребления памяти, Qt + MySQL, утечка памяти?
Отправлено: sarbash от Июль 18, 2010, 23:26
Вот это:
Код:
tempQuery = 0;
зря. Отсюда, скорее всего, и утечка.


Название: Re: Увеличение потребления памяти, Qt + MySQL, утечка памяти?
Отправлено: MyIQNegative от Июль 19, 2010, 04:52
Нет, проверял, утечка не изза зануления query. Проверял не один раз. Здесь что-то другое.


Название: Re: Увеличение потребления памяти, Qt + MySQL, утечка памяти?
Отправлено: NicK от Июль 19, 2010, 09:01
Ничего страшного. У меня такая же ситуация. Таким же образом по таймеру в отдельном потоке создаю временное подключение к БД,а потом его удаляю.
Как показывает практика, расход памяти увеличивается в течение какого-то времени, но до определенного предела (как правило, не более мегабайта на десять созданных/удаленных соединений). После этого создание-работа-удаление соединения не приводит к утечке памяти (точнее, память корректно освобождается).


Название: Re: Увеличение потребления памяти, Qt + MySQL, утечка памяти?
Отправлено: MyIQNegative от Июль 19, 2010, 09:59
Спасибо за ответ, буду надеяться на то, что вся память не сожрется :)