crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Утечка памяти, Виджеты и освобождение памяти
Zet2010
  опции профиля:
сообщение 7.1.2017, 22:46
Сообщение #1


Новичок


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

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




Репутация:   0  


Добрый день. У меня такой вопрос. Я создаю в программe виджеты QLabel в контейнере QList через оператор new. Так же, при создании эти виджеты становятся детьми виджета scrollAreaWidgetContents.

Мне нужно создавать много объектов типа QLabel в контейнере QList , также периодически их нужно добавлять, удалять
из контейнера. Иногда все сразу удалять нужно.

Всё удаляется, только память не возвращается , а растёт. Всё бы ничего, но растёт она очень сильно, то есть создали объектов (Qlabel) на 40 мегабайт, удалили их и снова создали на 40 , приложение вместо 40 уже 80 мегабайт весит :(

Код создания:

 ...
objList << new QLabel(this->ui->scrollAreaWidgetContents);
objList[i]->setAttribute(Qt::WA_DeleteOnClose);  // моя попытка решить проблему (не помогла)
objList[i]->setGeometry(xpl,ypl, wpl,hpl);
...



Код удаления всех объектов:

for(int i = 0; i < size; i++ )// удаляем все объекты контейнера QList (Qlabel)
{
   delete objList.at(0);
   objList.removeAt(0);
}


Нашёл тут (на форуме) пару тем на похожие проблемы, но решения там я не увидел. Сам попытался решить(в коде подписал я свою попытку),но это увы не помогло, остаётся надеяться только на вашу помощь.

P.s Расход памяти смотрю через диспетчер задач - Windows 10.


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 7.1.2017, 23:46
Сообщение #2


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

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

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




Репутация:   8  


Диспетчер задач не очень хороший инструмент, возможно у вас и нет утечек. Почитайте про то что показывает диспетчер задач
http://cybernetnews.com/cybernotes-windows...sage-explained/
Попробуйти запустить надолго свою программу, и посмотрите придет ли потребление памяти в насыщение.
Используйте специализированный инструмент
http://stackoverflow.com/questions/1423585...-in-windows-x64
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zet2010
  опции профиля:
сообщение 8.1.2017, 0:32
Сообщение #3


Новичок


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

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




Репутация:   0  


Цитата(lanz @ 8.1.2017, 1:46) *
Диспетчер задач не очень хороший инструмент, возможно у вас и нет утечек. Почитайте про то что показывает диспетчер задач
http://cybernetnews.com/cybernotes-windows...sage-explained/
Попробуйти запустить надолго свою программу, и посмотрите придет ли потребление памяти в насыщение.
Используйте специализированный инструмент
http://stackoverflow.com/questions/1423585...-in-windows-x64


Спасибо ,что так быстро ответили.

Пока ждал ответ - я ещё раз внимательно посмотрел код своей программы и пришла мысль,что дело может быть не в Qt (там (в моей программе) кроме библиотек Qt используется другая библиотека dll ).
Она работает с потоками , может их создавать и удалять, вот в ней то и была причина.

Вернее мой код не освобождал ресурсы (от созданных потоков) , вот и получилась в итоге , такая утечка памяти :)

P.s Так же , до решения проблемы , расход памяти глянул ещё через - ProcessHacker.exe и результаты совпали с диспетчером Windows 10.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 9.1.2017, 1:16
Сообщение #4


Профессионал
*****

Группа: Модератор
Сообщений: 1636
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

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




Репутация:   12  


использовать диспетчер для измерения памяти не стоит, как выше написали.
если хочешь управлять распределением памяти - пиши сам или используй уже готовые пулы памяти. заодно ещё и ускоришь работу своей программы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.1.2017, 6:22
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9684
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(Zet2010 @ 8.1.2017, 0:46) *
P.s Расход памяти смотрю через диспетчер задач - Windows 10.
Указать номер версии Qt тоже не помешает
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 26.2.2017, 3:55