Название: Qt и потребление памяти Отправлено: Jabberwokky от Январь 14, 2009, 20:30 Добрый день, я недавно начал изучать Qt и столкнулся с такой проблемой:
В одном из примеров рассказывается как создать простейшие виды layout'ов. Программа, получаемая на выходе занимает аж 19 метров памяти, при этом не делая ничего, кроме отображения нескольких кнопок и текстовых полей. Это, к сожалению, очень много. :( Не подскажете, почему так происходит и можно ли уменьшить потребление памяти? Текст примера можно найти в Assistant -> Basic Layouts Example, но на всякий случай прилагаю его к сообщению. Код: Dialog.h: Спасибо. Название: Re: Qt и потребление памяти Отправлено: Rcus от Январь 14, 2009, 20:50 Qt 4.4.3, полет нормальный.
Название: Re: Qt и потребление памяти Отправлено: Jabberwokky от Январь 14, 2009, 20:53 Rcus, может дело в том, что у вас Линукс?
У меня есть мысль, что так много памяти уходит на загрузку динамических библиотек в память, но я с ними только учусь работать и поэтому разбираюсь в этом плохо. :-\ Название: Re: Qt и потребление памяти Отправлено: Rcus от Январь 14, 2009, 20:58 Дело в том, как вы считаете память. При загрузке приложения исполняемый файл и все разделяемые библиотеки отображаются в память. Отображение в память конечно еще не означает, что именно столько оперативной памяти используется. Второй фактор это способ учета памяти занимаемой разделямыми библиотеками. Если вы пользуетесь стандартным taskmgr то он учитывает в статистике потребления памяти память занимаемую библиотеками (если я ничего не перепутал). И по мне так это вполне нормально при динамической сборке.
Название: Re: Qt и потребление памяти Отправлено: Jabberwokky от Январь 14, 2009, 21:02 Rcus, Спасибо.
Название: Re: Qt и потребление памяти Отправлено: Jabberwokky от Январь 14, 2009, 23:33 Ещё один вопрос (спрошу здесь, чтобы не плодить темы). Пример всё тот же.
Если добавить ещё один QLineEdit, а на кнопку рядом с ним повесить QFileDialog::getExistingDirectory(), то мы получаем стандартный диалог виндоус для выбора файла. Проблема в том, что на этот диалог тратится ещё три метра памяти, которые после закрытия диалога не особождаются. Наверное, логично было бы вызывать деструктор, но ведь я не создаю объекта QFileDialog. ??? Код: Код:
Название: Re: Qt и потребление памяти Отправлено: Rcus от Январь 14, 2009, 23:44 для нативных диалогов под windows используются диалоги предоставляемые shell32.dll, скорее всего поэтому.
Название: Re: Qt и потребление памяти Отправлено: Jabberwokky от Январь 15, 2009, 00:12 Спасибо.
Хм, проверил на некоторых других программах, не использующих Qt. Действительно, точно такое же поведение, память, к-ю показывает task manager, не освобождается. Не замечал никогда. Название: Re: Qt и потребление памяти Отправлено: Detonator от Январь 15, 2009, 00:30 А смысл ее освобождать, ведь она в дальнейшем снова может потребоваться. Тем более система вам выделяет виртуальное адресное пространство, а не реальную память. Страницы памяти будут предоставлены по необходимости, а если освободите и больше к ним обращаться не будете то они просто уйдут в своп.
Название: Re: Qt и потребление памяти Отправлено: lswa от Май 13, 2009, 03:51 Приветствую! Набрел на тему в поисках ответа на свой вопрос: под Windows при вызове статической функции QDialog::getExistingDirectory(...) и последующего закрытия приложения оно виснет в списке задач, пока вручную не удалишь его. Исследования показали, что именно эта функция подвешивает программу.
Как-нибудь с этим можно бороться? В Linux'е все работает нормально... Название: Re: Qt и потребление памяти Отправлено: pastor от Май 13, 2009, 11:55 показывай код
Название: Re: Qt и потребление памяти Отправлено: beak от Июнь 04, 2009, 09:12 Тоже обнаружил адское сжирание памяти в QFileDialog::getExistingDirectory
IBM Rational Purify на одной машине показывает 141 кб а на другой 7 кб, везде стоит VS9 и Qt4.5.1, разница только в том что в первом случае есть зашаренные диски. кто нибудь подскажет как подлечить это? Название: Re: Qt и потребление памяти Отправлено: Rcus от Июнь 04, 2009, 10:21 /*пожимает плечами*/
Valgrind обычно пишет трейс стека вызовов при обнаружении утечки когда работает с memcheck, а без стека чего гадать? Название: Re: Qt и потребление памяти Отправлено: Tonal от Июнь 04, 2009, 13:25 Винда при открытии файлового диалога ещё и несколько потоков запущает.
А выбор директории через COM-овские сервисы Explorer-а работает. Так что если хочется это безобразие обуздать, то нужно писать свои, полностью Qt-ёвые диалоги. |