Название: QT и память Отправлено: pakulo от Апрель 08, 2007, 13:07 Добрый день,
У меня такой вопрос. Создал простенькую программку на QT, просто кнопка. И она у меня в памяти занимает 12мб. Посмотрев многие примеры, оказалось что минимальный размер программы с библиотекой QT будет 10мб где-то. Возможно ли как-то уменьшить этот показатель? Если у меня программка будет сидеть в трее, можно ли сделать, что бы она занимала не 10мб, а скажем 1мб... Спасибо Название: QT и память Отправлено: noosooth от Апрель 08, 2007, 16:15 Боюсь радикально тут ничего не сделать.
Жрет память, зараза :), что для библиотеки такого класса и при нынешних объемах памяти - вполне нормально. Боюсь для Вас это будет слабым утешением, но при увеличении Вашего собственного кода (не одна кнопка, а скажем двадцать одна) размер потребляемой памяти растет не так радикально. Ещё такой нюанс (если Вы под виндой): Скажем моё поделие (Qt 4.2.3) под XP и XP64, если верить Task Manager,занимает в памяти 10-11 метров. Если приложение свернуть (минимизировать), то Task Manager показывает всего-лишь 1,5 метра. Тут пробовал запускать под Vista x64 - тамошний Task Manager или как его там зовут - кажет стабильно 8 c лишним мегабайт, в том числе и для "свернутого" приложения. Спрашивается кому верить? (бинарник один и тот же, Qt собран статически) Название: QT и память Отправлено: pakulo от Апрель 08, 2007, 16:20 >>Если приложение свернуть (минимизировать), то Task Manager показывает всего-лишь 1,5 метра.
Да, я видел это. Мне вот интересно. Это реализовано библиотекой или ОС сама это делает. Т.е. может при минимизации она сама уменьшает память, копируя данные на диск.. :) Тогда такой вопрос. У меня программа занимает 20Мб, я поработал, свернул ее в трей, как мне сделать что бы уменьшилась память? т.е. также как при минимизации... Название: QT и память Отправлено: _govorilka от Апрель 08, 2007, 16:40 Цитата: "pakulo" Добрый день, У меня такой вопрос. Создал простенькую программку на QT, просто кнопка. И она у меня в памяти занимает 12мб. Посмотрев многие примеры, оказалось что минимальный размер программы с библиотекой QT будет 10мб где-то. Возможно ли как-то уменьшить этот показатель? Если у меня программка будет сидеть в трее, можно ли сделать, что бы она занимала не 10мб, а скажем 1мб... Спасибо Раздели свою программу на две половинки (сделай два exe-файла): 1. То, что постоянно весит в трее 2. То, что запускается в отдельном процессе, после каких-либо действий пользователя (щелчок мыши по иконке, расписание или системное событие). В первом куске, не используй никаких Gui-примочек (исключение cоставляет разве, что иконка в трее), тогда объем памяти будет гораздо меньше. добавлено спустя 17 минут: Цитата: "noosooth" Ещё такой нюанс (если Вы под виндой): Скажем моё поделие (Qt 4.2.3) под XP и XP64, если верить Task Manager,занимает в памяти 10-11 метров. Если приложение свернуть (минимизировать), то Task Manager показывает всего-лишь 1,5 метра. Это глюк Task Manager'а. Вместо него пользуюсь бесплатной Process Explorer (скачать можно отсюда - http://www.microsoft.com/technet/sysinternals/ProcessesAndThreads/ProcessExplorer.mspx). Название: QT и память Отправлено: pakulo от Апрель 08, 2007, 16:58 Не, разделять на две программы не можно.
Может просто есть какая-нить функция чистки памяти? :) Название: QT и память Отправлено: _govorilka от Апрель 08, 2007, 17:18 Цитата: "pakulo" Не, разделять на две программы не можно. Может просто есть какая-нить функция чистки памяти? :) Цитата: "pakulo" Не, разделять на две программы не можно. Может просто есть какая-нить функция чистки памяти? :) Разделение на две программы - это не способ чистки памяти, это способ оптимизации программы. Зачем постоянно держать в трее Gui-поток? Название: QT и память Отправлено: pakulo от Апрель 08, 2007, 17:56 Проблема в том, что у меня программа клиент, скажем до сервера АСИ.
Поэтому возможности разделить на две программы нету. (( Название: QT и память Отправлено: _govorilka от Апрель 08, 2007, 18:19 Цитата: "pakulo" Проблема в том, что у меня программа клиент, скажем до сервера АСИ. Поэтому возможности разделить на две программы нету. (( Найди в форме тему о размере exe, мне кажется, там есть ответы интересные для тебя. Попробуй оптимизировать саму библиотеку Qt (Отключи классы, которые тебе не нужны), включи максимальную оптимизацию кода в настройках компилятора и т.д. Название: QT и память Отправлено: noosooth от Апрель 08, 2007, 18:22 Цитата: "_govorilka" Цитата: "noosooth" ...Если приложение свернуть (минимизировать), то Task Manager показывает всего-лишь 1,5 метра. Это глюк Task Manager'а. Вместо него пользуюсь бесплатной Process Explorer ... Не вижу никакой разницы между показаниями Task Manager'а (Mem Usage) и Process Explorer'а (Working set) под XP64 SP2. Абсолютно одно и тоже. Где глюк-то? Насчет Vista, виноват, не туда смотрел. Тоже уменьшает размер при свертывании, но не так радикально. Название: QT и память Отправлено: _govorilka от Апрель 08, 2007, 18:28 У меня Windows XP Pro SP2, а Process Explorer, как мне кажется, просто удобнее стандартного Task Manager'a
Название: QT и память Отправлено: noosooth от Апрель 08, 2007, 18:50 Цитата: "_govorilka" У меня Windows XP Pro SP2, а Process Explorer, как мне кажется, просто удобнее стандартного Task Manager'a И такая операционка где-то тут у меня валяется и тоже показания одинаковые. Про глюк Вы пошутили или к слову пришлось? Название: QT и память Отправлено: _govorilka от Апрель 08, 2007, 19:12 Цитата: "noosooth" И такая операционка где-то тут у меня валяется и тоже показания одинаковые. Про глюк Вы пошутили или к слову пришлось? Можно вопрос, чем так быстро оси меняете? Название: QT и память Отправлено: noosooth от Апрель 08, 2007, 20:07 Да просто несколько осей на разных винтах да разделах + Grub.
Перезагрузится недолго вроде ;). Наверное что-нить вроде VMware в данном случае удобнее, но я так сказать напрямую желаю без "посредников". Честно говоря, достал этот зоопарк из "многообразных" операционных систем от M$. Название: QT и память Отправлено: Alex03 от Апрель 09, 2007, 09:04 Вроде как XP буферизирует (частично) видео вывод, вот выделяет память под окна.
Название: QT и память Отправлено: Mr. Пронька от Апрель 09, 2007, 09:39 Цитировать Вроде как XP буферизирует (частично) видео вывод, вот выделяет память под окна. Всякое возможно. А с другими приложениями вы этот трюк наблюдали? Я уже когда-то поднимал тему про выделение памяти в Qt-приложениях, но никто ничего толком ответить не смог. Дело не только в том, что при сворачивании количество потребляемой памяти снижается. При разворачивании окна на весь экран оно ещё и увеличивается! Название: QT и память Отправлено: noosooth от Апрель 09, 2007, 10:06 Господа, про уменьшение "Mem Usage" (Working Set) под виндой при
минимизации top-level окна читайте вот здесь (http://support.microsoft.com/default.aspx?scid=kb;en-us;Q293215). Ну и про функцию SetProcessWorkingSetSize() в MSDN. Название: QT и память Отправлено: pakulo от Апрель 09, 2007, 16:27 Mr. Пронька,
Вот именно, поэтому я и спросил. Мне кажеться что это все работа ХР. Такое наблюдал я и с Оперой, занимает 80мб, свернул уже 20Мб (Она тоже на QT). Вот Лиса никак не уменьшает память при сворачивание. Поэтому меня и интересует, это дело библиотеки или ОС. Свернул Ворд, занимал 20Мб, стало 1Мб. Свернул Експлорер было 15Мб, стало 1.5Мб. Все как-то странно. И почему когда я сворачиваю в трей программу на КуТе, то память не уменьшается? :) добавлено спустя 5 часов 58 минут: У кого есть utorrent или MSN, то можно увидеть, что при сворачивании программы в трей, размер занимаемый программой в памяти уменьшается. Как это реализовано? Название: QT и память Отправлено: _govorilka от Апрель 09, 2007, 16:39 Цитата: "Mr. Пронька" Цитировать Вроде как XP буферизирует (частично) видео вывод, вот выделяет память под окна. Всякое возможно. А с другими приложениями вы этот трюк наблюдали? Я уже когда-то поднимал тему про выделение памяти в Qt-приложениях, но никто ничего толком ответить не смог. Дело не только в том, что при сворачивании количество потребляемой памяти снижается. При разворачивании окна на весь экран оно ещё и увеличивается! Вывод буферизирует не XP, а Qt, причем использует для этого QPixmap. Чем больше размер вашего окна, тем требуется для хранения буфера. При сворачивании буфер уничтожается, поэтому программа потребляет меньше памяти. Название: QT и память Отправлено: pakulo от Апрель 09, 2007, 17:29 Как можно реализовать очистку буфера когда программа сворачивается в трей?
Название: QT и память Отправлено: _govorilka от Апрель 09, 2007, 17:33 Цитата: "pakulo" Как можно реализовать очистку буфера когда программа сворачивается в трей? Qt сама очищает буфер, при сворачивание окна, а вот операционка (WinXP) очищает неиспользуемую память через раз. Не понимаю, почему ты так зациклился на этой проблеме, неужели других нет. Название: QT и память Отправлено: pakulo от Апрель 09, 2007, 17:40 Проблем много. Решаю все параллельно :)
Эта проблема очень волнует, так как программа в памяти может занимать до 20Мб и когда свернул ее в трей, всеравно 20Мб, а хотелось бы по меньше. QT не очищает буфер при сворачивании в трей, очищает при минимизации. Название: QT и память Отправлено: _govorilka от Апрель 09, 2007, 18:05 Цитата: "pakulo" Проблем много. Решаю все параллельно :) Эта проблема очень волнует, так как программа в памяти может занимать до 20Мб и когда свернул ее в трей, всеравно 20Мб, а хотелось бы по меньше. QT не очищает буфер при сворачивании в трей, очищает при минимизации. Можно вопрос, какой компилятор используешь? С какими настройками? Название: QT и память Отправлено: pakulo от Апрель 09, 2007, 18:15 Использую mingw32.
Какие настройки нужны? Название: QT и память Отправлено: _govorilka от Апрель 09, 2007, 18:23 Цитата: "pakulo" Использую mingw32. Какие настройки нужны? Мне кажется, что VS все-таки лучше, чем mingw32 (после этого сообщения все опять начнут Holy War), программы занимают меньше памяти и код выполняется быстрее. Установи и сравни, в любой случае всегда потом сможешь удалить. Почитай тему про компиляторы, там есть полезные ответы. Вовремя удаляй не нужные объекты, например, при сворачивание в трей, можно удалить окно программы, а при разворачивание создать его заново. Название: QT и память Отправлено: pakulo от Апрель 09, 2007, 19:02 Спасибо буду смотреть.
|