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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableView очистка памяти  (Прочитано 4018 раз)
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();

}
Таблица очищается память не высвобождается
« Последнее редактирование: Декабрь 24, 2013, 12:13 от mevn » Записан
Serr500
Гость
« Ответ #1 : Декабрь 24, 2013, 21:45 »

А с чего был сделан вывод что память не высвобождается?
Записан
mevn
Гость
« Ответ #2 : Декабрь 25, 2013, 04:45 »

А с чего был сделан вывод что память не высвобождается?

Проверял - win taskmgr (Программа пишется под винду. 100 Мб в оперативке заметный фрагмент.)
 Данный класс является родителем нескольких "Таблиц", таблицы переключаются между собой (отображаются на одной форме, но по одной). Среди них есть и пустые, и сильно наполненные (около 100 столбцов и 10000 строк, данные в формате QString )
При запуске, все реагирует более менее нормально. При открытии самой большой таблицы, появляется 100 мб. при открытии других память немного убывает, после этого память в оперативке начинает потихоньку расти. Указанные выше процедуры не привели к ожидаемому результату.
Записан
Bepec
Гость
« Ответ #3 : Декабрь 25, 2013, 07:33 »

model.removeRow проверьте, проходит или нет. Булевское значение оно возвращает.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Декабрь 25, 2013, 10:55 »

Обычный Memory Manager приложения (malloc) при освобождении памяти не отдаёт её системе.
Он просто помечает её свободной и переиспользует в дальнейшем.
Мало того, нужно иметь в виду, что память может быть фрагментированной и не всегда её можно полностью освободить.
Записан

Qt 5.11/4.8.7 (X11/Win)
mevn
Гость
« Ответ #5 : Декабрь 25, 2013, 16:49 »

model.removeRow проверьте, проходит или нет. Булевское значение оно возвращает.
Спасибо проверю.
Записан
mevn
Гость
« Ответ #6 : Декабрь 27, 2013, 18:11 »

Обычный Memory Manager приложения (malloc) при освобождении памяти не отдаёт её системе.
Он просто помечает её свободной и переиспользует в дальнейшем.
Мало того, нужно иметь в виду, что память может быть фрагментированной и не всегда её можно полностью освободить.

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

Загрузил оперативку винды по полной, все заработало. Не посоветуете ли прогамму для мноиторинга ресурсов под win 7х64?
Записан
carrygun
Гость
« Ответ #7 : Декабрь 28, 2013, 04:30 »

Не посоветуете ли прогамму для мноиторинга ресурсов под win 7х64?
Монитор ресурсов в диспетчере задач?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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