Russian Qt Forum
Ноябрь 24, 2024, 14:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Увеличение потребления памяти, Qt + MySQL, утечка памяти?  (Прочитано 4200 раз)
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кб. На что? Помогите разобраться, пожалуйста.
Записан
MyIQNegative
Гость
« Ответ #1 : Июль 18, 2010, 18:50 »

Неужто ни у кого нет никаких предположений?
Записан
sarbash
Гость
« Ответ #2 : Июль 18, 2010, 23:26 »

Вот это:
Код:
tempQuery = 0;
зря. Отсюда, скорее всего, и утечка.
Записан
MyIQNegative
Гость
« Ответ #3 : Июль 19, 2010, 04:52 »

Нет, проверял, утечка не изза зануления query. Проверял не один раз. Здесь что-то другое.
Записан
NicK
Гость
« Ответ #4 : Июль 19, 2010, 09:01 »

Ничего страшного. У меня такая же ситуация. Таким же образом по таймеру в отдельном потоке создаю временное подключение к БД,а потом его удаляю.
Как показывает практика, расход памяти увеличивается в течение какого-то времени, но до определенного предела (как правило, не более мегабайта на десять созданных/удаленных соединений). После этого создание-работа-удаление соединения не приводит к утечке памяти (точнее, память корректно освобождается).
Записан
MyIQNegative
Гость
« Ответ #5 : Июль 19, 2010, 09:59 »

Спасибо за ответ, буду надеяться на то, что вся память не сожрется Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.21 секунд. Запросов: 21.