crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Утечка памяти QSqlQuery.next()
guest456
  опции профиля:
сообщение 2.8.2017, 12:45
Сообщение #1


Новичок


Группа: Неактивирован
Сообщений: 3
Регистрация: 2.8.2017
Пользователь №: 4598

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый день уважаемые форумчане. Есть простейший код выборки из базы данных sqlite. Проблема в том, что в базе есть очень большое число различных строк. При работе с небольшими базами, проблем нет. А при большой базе, программа вылетает с ошибкой out of memory.

        if(!CreateConnection())
        {
            return;
        }
        QSqlQuery query;
        if(!query.exec("SELECT * FROM adress"))
        {
            qDebug() << query.lastError();
            return;
        }
        QString str;
        while(query.next())
        {
            //str= query.value(0).toString();
            //qDebug() << domen;
        }


При работе программы, количество потребляемой памяти доходит до 800MB и программа вылетает. Как правильно делать выборку с больших по размеру баз. Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 2.8.2017, 12:52
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


SELECT * FROM ... LIMIT x OFFSET y ORDER BY ...

Например, но вообще странно, вы уверены что имено query жреть память, а не код внутри цикла?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
guest456
  опции профиля:
сообщение 2.8.2017, 13:11
Сообщение #3


Новичок


Группа: Неактивирован
Сообщений: 3
Регистрация: 2.8.2017
Пользователь №: 4598

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 2.8.2017, 1:52) *
SELECT * FROM ... LIMIT x OFFSET y ORDER BY ...

Например, но вообще странно, вы уверены что имено query жреть память, а не код внутри цикла?


К сожалению, это так. Т.е вот этот пустой цикл:
        while(query.next())
        {

        }


Вызывает эту ошибку



Уже и пробовал ставить qt creator версии 4.8 - тоже самое. Не могу понять как же сделать выборку по всей базе (
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 2.8.2017, 13:18
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Я посмотрел исходники, там драйвер кеширует результаты, поэтому да, вы правы, он все съел :)
Попробуйте LIMIT/OFFSET как я писал выше.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
guest456
  опции профиля:
сообщение 2.8.2017, 13:38
Сообщение #5


Новичок


Группа: Неактивирован
Сообщений: 3
Регистрация: 2.8.2017
Пользователь №: 4598

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 2.8.2017, 2:18) *
Я посмотрел исходники, там драйвер кеширует результаты, поэтому да, вы правы, он все съел :)
Попробуйте LIMIT/OFFSET как я писал выше.

Благодарю. А то я уже не знал что думать. Попробую как вы сказали. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 5:05