LINUX.ORG.RU

Qt, QPixmap, X11 не освобождает ненужную память, копит старое барахло.

 , ,


0

2

В приложении используется 128 объектов QPixmap как составные части бесконечно длинной прокручиваемой вертикальной простыни. Каждый QPixmap формируется из QImage через QPixmap::convertFromImage() - однажды, при первом выводе на экран. Далее в paintEvent() отрисовываются уже готовые QPixmap-ы. Если юзер затусовался совсем далеко, начинают переиспользоваться QPIxmap-ы из начала списка. Таким образом, если юзер тусуется в какой-то окресности, он без особых затрат ЦП крутит готовые QPixmap-ы.

При этом в приложении QPixmap-ы создаются только однажды, далее их содержимое иногда меняется через QPixmap::convertFromImage(). Во время работы приложения, его показатели памяти VIRT, RES не меняются. В то же время, если прокручивать вышеуказанную простыню, иксы сильно жрут память, примерно по 1...2 MB в секунду. Известно, что QPixmap - класс, хранящий свои данные на любой ОС всегда «поближе к видеокарте», в линуксовой реализации это выделялка иксовых буферов и складывалка картинок туда, а потом выводилка этих буферов, поэтому получается быстро и дешёво. Но похоже я что-то должен делать, чтобы они освобождались? Необходимо прибивать QPixmap-ы, а простая их перерисовка гарантирует утечку памяти в исках?

После продолжительной работы приложения иксы отжирают под гигабайт и жрут дальше. Прибитие приложения приводит к резкому сокращению потребления памяти иксами.

Ответ на: комментарий от zJes

что-то такое тоже слышал, где-то здесь подобный вопрос уже был. очень похоже на баг в кьюте.

anonymous
()
Ответ на: комментарий от I-Love-Microsoft

Привет. Не в курсе, где ошибка - может быть нужно как-то явно командовать иксам, но пока суперподробно не разбирался, здравый смысл протестует против такой фигни.Тот же код собирается под виндой - там тоже посмотрю, но вроде там ничё такого не утекает, но там никак не проверишь - там «иксы» запилены в ядро, которые в случае 7-й винды отжирают гиг ОЗУ при загрузке, используя их по мере надобности, никак не показывая сколько из них под что заюзано...

kiverattes ★☆
() автор топика
Ответ на: комментарий от bhfq

Ну не переучиваться же на новый дистр... Тут всё такое привычное.

kiverattes ★☆
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Хорошо. Забыл этой ночью зафигачить новый Qt, попробую сёдня.

kiverattes ★☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.