Russian Qt Forum

Qt => Вопросы новичков => Тема начата: mevn от Декабрь 24, 2013, 12:10



Название: QTableView очистка памяти
Отправлено: mevn от Декабрь 24, 2013, 12:10
Добрый день.
Не подскажете ли, как можно решить следующую проблему.
Имеется таблица
Код:
class SqlDBTbl : public QObject
{
Q_OBJECT
protected:
QStandardItemModel model;    ///< модель для хранения данных
QItemSelectionModel sel_model;    ///< модель для управления выделением записей
    QTableView *table;    ///< таблица для отображения данных
...
Данная таблица заполняется данными.
Необходимо чистить память занимаемую этой таблицей. Пробовал так
Код:
        if(table)
{

while (model.rowCount())
{
for(int ii = 0 ; ii< model.columnCount();ii++ )
{
delete model.item(0,ii);

}
model.removeRow(0 );
}
model.clear();
table->setModel(&model);
table->reset();

}
Таблица очищается память не высвобождается


Название: Re: QTableView очистка памяти
Отправлено: Serr500 от Декабрь 24, 2013, 21:45
А с чего был сделан вывод что память не высвобождается?


Название: Re: QTableView очистка памяти
Отправлено: mevn от Декабрь 25, 2013, 04:45
А с чего был сделан вывод что память не высвобождается?

Проверял - win taskmgr (Программа пишется под винду. 100 Мб в оперативке заметный фрагмент.)
 Данный класс является родителем нескольких "Таблиц", таблицы переключаются между собой (отображаются на одной форме, но по одной). Среди них есть и пустые, и сильно наполненные (около 100 столбцов и 10000 строк, данные в формате QString )
При запуске, все реагирует более менее нормально. При открытии самой большой таблицы, появляется 100 мб. при открытии других память немного убывает, после этого память в оперативке начинает потихоньку расти. Указанные выше процедуры не привели к ожидаемому результату.


Название: Re: QTableView очистка памяти
Отправлено: Bepec от Декабрь 25, 2013, 07:33
model.removeRow проверьте, проходит или нет. Булевское значение оно возвращает.


Название: Re: QTableView очистка памяти
Отправлено: GreatSnake от Декабрь 25, 2013, 10:55
Обычный Memory Manager приложения (malloc) при освобождении памяти не отдаёт её системе.
Он просто помечает её свободной и переиспользует в дальнейшем.
Мало того, нужно иметь в виду, что память может быть фрагментированной и не всегда её можно полностью освободить.


Название: Re: QTableView очистка памяти
Отправлено: mevn от Декабрь 25, 2013, 16:49
model.removeRow проверьте, проходит или нет. Булевское значение оно возвращает.
Спасибо проверю.


Название: Re: QTableView очистка памяти
Отправлено: mevn от Декабрь 27, 2013, 18:11
Обычный Memory Manager приложения (malloc) при освобождении памяти не отдаёт её системе.
Он просто помечает её свободной и переиспользует в дальнейшем.
Мало того, нужно иметь в виду, что память может быть фрагментированной и не всегда её можно полностью освободить.

Вы правы, проблема решилась следующим образом...
Выполнял манипуляции, ставил процесс на запуск (на ночь). Ничего не происходило.

Загрузил оперативку винды по полной, все заработало. Не посоветуете ли прогамму для мноиторинга ресурсов под win 7х64?


Название: Re: QTableView очистка памяти
Отправлено: carrygun от Декабрь 28, 2013, 04:30
Не посоветуете ли прогамму для мноиторинга ресурсов под win 7х64?
Монитор ресурсов в диспетчере задач?