Занимаемая программой память

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Занимаемая программой память

Сообщение Space » 25.09.2008 (Чт) 18:26

Моя прога занимает в памяти по Диспетчеру задач 25-30 Мб (да ещё не доработана вовсе). При клике на иконке в трее и сворачивании/разворачивании окна объём памяти нисколько не меняется (Show/Hide). При показе дочерних окон объём памяти колеблется весьма незначительно. Такое впечатление, что все формы в проекте загружены в память, хотя загружена только одна главная форма (имеется куча других форм). При показе окна с WebBrowser объём памяти увеличивается где-то на 10 Мб и потом после его закрытия объём памяти не уменьшается (такое ощущение, что данные WebBrowser продолжают занимать память). Размер exe чуть меньше 2 Мб, всех frx проекта <400Кб. Много изображений в ImageList-ах: 78(16x16px)+ 176(средний размер 20x20px). Как определить, какие данные занимают сколько памяти?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Занимаемая программой память

Сообщение Хакер » 25.09.2008 (Чт) 18:46

Space писал(а):Как определить, какие данные занимают сколько памяти?


Открыть программу в OllyDbg и начинаешь её выполнение там.
Изображение

После чего тебе откроется следующий вид:
Изображение

Где можно наслаждаться колонками "Size", "Owner", "Contains", да и всеми остальными.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Занимаемая программой память

Сообщение SLIM » 26.09.2008 (Пт) 0:19

А что там конкретно отображается то? переменные? Объекты, занимающие память? Что это?
Пишите жизнь на чистовик.....переписать не удастся.....

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Занимаемая программой память

Сообщение Хакер » 26.09.2008 (Пт) 0:23

Закоммиченные куски АП процесса. Занятые блоки памяти, проще говоря.

При том, показывается адрес блока; размер блока; владелец, если блок является маппингом файла; тип (выделенный блок / пользовательский маппинг (созданный с помощью CreateFileMapping) / системный маппинг (выделенный загрузчиком); атрибуты доступа (RWE и Guard-ность (заминированность)); изначальный атрибуты доступа; пояснение; и адрес промаппленного файла, если блок является маппингом.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Занимаемая программой память

Сообщение Antonariy » 26.09.2008 (Пт) 9:34

Space
Если тебе известно про период жизни объектов, аккуратно прибиваешь все, что не нужно, и не грузишь в память видеофайлы целиком, то не забивай себе голову такими вопросами. У тебя нет жестких ограничений, как при программировании микроконтроллеров или под DOS. Или мобильников :)
такое ощущение, что данные WebBrowser продолжают занимать память
Так и есть, но это особенность винды — грубо говоря, она не сразу удаляет данные, которые могут быть затребованы вновь. В висте этот механизм доработан, благодаря чему VB и половина других программ там просто летает. Утечки памяти все равно будут, но это уже проблемы VB, на которые повлиять невозможно. Самые большие утечки происходят при динамическом добавлении/удалении юзерконтролов. А при повторном открытии формы с вебброузером объем занимаемой памяти увеличится незначительно.
Лучший способ понять что-то самому — объяснить это другому.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Занимаемая программой память

Сообщение Space » 26.09.2008 (Пт) 14:06

а разве при Unload формы объекты не уничтожаются? Значит, мне нужно записывать в WB.document.write "" - не помогает :(

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Занимаемая программой память

Сообщение Хакер » 26.09.2008 (Пт) 14:26

При Unload ссылка на объект удаляется из коллекции Form, объекту, адрес которого лежит в переменной, ссылку на которую передали, делается IUnknown::Release, в переменную, ссылку на которую передали записывает 0. Не более того.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Занимаемая программой память

Сообщение ANDLL » 26.09.2008 (Пт) 14:45

Хакер писал(а):При Unload ссылка на объект удаляется из коллекции Form, объекту, адрес которого лежит в переменной, ссылку на которую передали, делается IUnknown::Release, в переменную, ссылку на которую передали записывает 0. Не более того.
Ага, но если цепочку проследить дальше, то все таки уничтожается. Просто как уже отметили куча сама по себе не сжимается обычно
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Занимаемая программой память

Сообщение Хакер » 26.09.2008 (Пт) 17:07

Как он может уничтожиться, если на объект будут где-то ещё ссылки, и счетчик ссылок будет не равен нулю?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Занимаемая программой память

Сообщение Proxy » 26.09.2008 (Пт) 18:41

Глупость: Если человек как экземпляр класса общества имеет после смерти надгробие, то он существует? А если есть надгробие, а сам человек пространство не занимает уже, т.е. его пространство уже распределено под флору и фауну мерзкую всякую? Т.е. битые указатели всё ещё делают пустоту объектом? Конечно да.
Follow the white rabbit.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Занимаемая программой память

Сообщение Space » 26.09.2008 (Пт) 21:07

а если ссылок на объект нет, и расход памяти не уменьшается? Похоже, что в VB весь проект загружен в память независимо от состояния ссылок.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Занимаемая программой память

Сообщение ANDLL » 26.09.2008 (Пт) 21:08

Space писал(а):а если ссылок на объект нет, и расход памяти не уменьшается?
Да прочитай же топик
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Eduard
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 31.08.2003 (Вс) 17:12
Откуда: Эстония

Re: Занимаемая программой память

Сообщение Eduard » 16.10.2008 (Чт) 0:59

меня тоже этот вопрос с утечкой все время терзал в целом, что как будто это процесс вообще не контролируемый в Vb. Из всего выше сказанного, некоторые детали обстоятельств с паматью в vb понатно теперь стали, поэтому не буду филонить...

Просто задам сразу конкретный вопрос, на примере. У многих на пк установлен Winamp (беру пример из 5-ых версий). В настройках в ней включаем, чтобы её значок был всё время только в треэ. Собственно запустить там что-нибуть на play, палазить в библиотеке, покнопать там, в браузере встроеном поиграть во флешь-игры можно (ну кароче чтобы она памяти набралась по-больше). (За всем происходящим c паметью наблюдаем в task manager)
И всю эту кухню взять и minimize нажать... В task manager можно сразу-незамедлительно узреть как память так с 80 мб соскачила на менее 10 мб.

Вообщем реально ли, конечто же с помощью api или ещё каких-нибуть тонкостей системы сотворить сие в vb-приложении ?! Так сказать почистить за сабой какасачки!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Занимаемая программой память

Сообщение tyomitch » 16.10.2008 (Чт) 9:51

SetProcessWorkingSetSize
Но нужно отдавать себе отчёт, что это никакая не очистка памяти, а трюк и видимость.
Изображение

Eduard
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 31.08.2003 (Вс) 17:12
Откуда: Эстония

Re: Занимаемая программой память

Сообщение Eduard » 16.10.2008 (Чт) 23:00

tyomitch писал(а):SetProcessWorkingSetSize
Но нужно отдавать себе отчёт, что это никакая не очистка памяти, а трюк и видимость.


ну да... может быть и в деталях, там что-то нечто отличное от очистки просиходит в недрях и глубинах адресации озу и прочих стеках... но для конечного потребителя и невооружоннего глаза смотрящего в task manager - выглядет даже очень солидно.

Тём, а это тоже из той оперы?, или всётаки, ближе к официальной чистки... Я скорее не соссем вижу различия в чистке памати и, чистки страниц из памати процесса. Я более потребительски смотрю на это, результат :wink: он радует

Код: Выделить всё
Private Declare Function EmptyWorkingSet Lib "PSAPI.DLL" (ByVal hProcess As Long) As Long
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long

Function PurgeMem() As Long
MsgBox "Watch the Mem Usage column of this process (PID " & Trim$(Str$(GetCurrentProcessId)) & ") in Task Manager, and press OK ...", _
         vbSystemModal + vbOKOnly + vbInformation, "Demo"
         
EmptyWorkingSet GetCurrentProcess
MsgBox "Done.", vbSystemModal + vbOKOnly + vbInformation, "Demo"
End Function
On Fatal Error Resume Next

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Занимаемая программой память

Сообщение ANDLL » 17.10.2008 (Пт) 11:33

Смешно, не правда ли - ктото старается оптимизировать код, что бы выделение\освобождение работало как можно быстрее, а ктото говорит - а насрать на производительность, главное чтоб памяти поменье кушало - ведь она сейчас баснословно дорога.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Занимаемая программой память

Сообщение Debugger » 17.10.2008 (Пт) 12:49

ANDLL писал(а):Смешно, не правда ли - ктото старается оптимизировать код, что бы выделение\освобождение работало как можно быстрее, а ктото говорит - а насрать на производительность, главное чтоб памяти поменье кушало - ведь она сейчас баснословно дорога.

Смешно, наверно. Но это противоречие "компактность-скорость" вполне логично. Жертвовать памятью ради скорости и наоборот.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 89

    TopList