|
|
|
Как узнать, какие формы проекта висят в памяти?
|
|||
|---|---|---|---|
|
#18+
Господа, подскажите, пожалуйста, как бы это узнать: Как узнать, какие формы, модули и контролы проекта висят в памяти? Нужно для отладки и организации своевременного освобождения памяти. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2006, 11:33 |
|
||
|
Как узнать, какие формы проекта висят в памяти?
|
|||
|---|---|---|---|
|
#18+
HelpA Forms collection is a collection whose elements represent each loaded form in an application. The collection includes the application's MDI form, MDI child forms, and non-MDI forms. The Forms collection has a single property, Count, that specifies the number of elements in the collection. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2006, 12:57 |
|
||
|
Как узнать, какие формы проекта висят в памяти?
|
|||
|---|---|---|---|
|
#18+
Я так понимаю что под модулями автор имеет ввиду экземпляры пользовательских классов? Желательно конечно с самого начала такие вещи отслеживать и взять себе это за привычку, иначе потому поиск забытых ссылок и хвостов тянет уйму врмени и нервов. Если проэкт небольшой то можно в принципе и в Locals посмотреть все что что не освобождено. Кстати, при закрытии проги васик свои личные ресурсы освобождает сам, вот если были использованы какие-то внешне ссылки, тогда да... Большой проэкт? Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2006, 20:10 |
|
||
|
Как узнать, какие формы проекта висят в памяти?
|
|||
|---|---|---|---|
|
#18+
To Magnus23: Проект большой (относительно, конечно). авторЖелательно конечно с самого начала такие вещи отслеживать и взять себе это за привычку... А что Вы имеете ввиду под "отслеживать"? Мне приходит в голову только поставить флаг в каждый Form_Load и Form_Unload? А как быть с "экземплярами пользовательских классов"? (под "модулями" я их и понимаю, хотя для меня они скорее наборы глобальных функций и констант). Ведь при вызове одной функции/процедуры из модуля в память грузится весь модуль, а это, прошу прощения, фиг отследишь. Вот и ищу: можно ли средствами отладки VB или (что лучше) каким-нибудь VB-шным классом или API-шной функцией посмотрей, что моя прога имет в памяти в произвольный момент времени? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2006, 08:52 |
|
||
|
Как узнать, какие формы проекта висят в памяти?
|
|||
|---|---|---|---|
|
#18+
Rustygold А как быть с "экземплярами пользовательских классов"? (под "модулями" я их и понимаю, хотя для меня они скорее наборы глобальных функций и констант). Похоже вы путаете стандартные модули, которые и можно использовать как "наборы глобальных функций и констант" с модулями классов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2006, 10:52 |
|
||
|
Как узнать, какие формы проекта висят в памяти?
|
|||
|---|---|---|---|
|
#18+
согласен. модули модулями, экземпляры классов экземплярами классов. с классификацией вопросов нет. вопрос-то в другом (см. выше) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2006, 16:24 |
|
||
|
Как узнать, какие формы проекта висят в памяти?
|
|||
|---|---|---|---|
|
#18+
Нет, вопрос как раз принципиальный. Если это просто модули("наборы функций и констант") то они вообще ничего никуда не загружает. Другое дело с модулями классов, это как раз то о чем я говорил, т.е. отслеживание созданных экземпляров класса. Для форм можно проверить коллекцию Forms, она содержит все ЗАГРУЖЕННЫЕ в данный момент формы. Что же до пользовательских обьектов, то можно сделать простой счетчик и увеличивать его на 1 в конструкторе(Init) класса. Под "отслеживать" я собственно имел ввиду уничтожать обьекты ручками, как только в них отпала необходимость. Т.е. если обьект нужен только локально в одной процедуре то и убиватье его при выходе из оной. Если нужен на форме то в form_unload. В конце концов это войдет в привычку и если четко определил для себя область видимости каждого обьекта то освобождать их не составит труда. На счет автоматических средств... что то такое крутится в голове, но никак не могу вспомнить, я с васиком уже некоторое время не работаю, забывается... Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2006, 19:10 |
|
||
|
Как узнать, какие формы проекта висят в памяти?
|
|||
|---|---|---|---|
|
#18+
Позволю себе вклиниться в ваш разговор. Автор хотел своевременно освобождать память - так вот, месяц назад я как раз рассказывал о найденном мной способе . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 10:42 |
|
||
|
Как узнать, какие формы проекта висят в памяти?
|
|||
|---|---|---|---|
|
#18+
Magnus23 Спасибо за объяснение. Melkiades Если я правильно понял, Ваш код выкидывает из оп.памяти текущий процесс - т.е. саму программу. Освобождение памяти во время простоя, возможно, иногда и актуально, но в данном случае нам(мне) интересно понять, как выгружать из памяти только неиспользуемые блоки, причём не в своп, а совсем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 16:42 |
|
||
|
Как узнать, какие формы проекта висят в памяти?
|
|||
|---|---|---|---|
|
#18+
однако бейсик вам не C и не Java, он сам решает что и как освобождать, а ваше дело уничтожать объектные переменные: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 17:05 |
|
||
|
Как узнать, какие формы проекта висят в памяти?
|
|||
|---|---|---|---|
|
#18+
Rustygold Если я правильно понял, Ваш код выкидывает из оп.памяти текущий процесс - т.е. саму программу. Освобождение памяти во время простоя, возможно, иногда и актуально, но в данном случае нам(мне) интересно понять, как выгружать из памяти только неиспользуемые блоки, причём не в своп, а совсем. CoFreeUnusedLibraries и выкидывает из памяти неспользуемые блоки. Насовсем. А SetProcessWorkingSetSize не выкидывает, а ограничивает размер используемой процессом области памяти, причем в любой момент времени, а не только в режиме простоя. Подробнее об этих функциях читайте в MSDN. ЗЫ. Вы вообще пробовали предложенный код? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 17:13 |
|
||
|
Как узнать, какие формы проекта висят в памяти?
|
|||
|---|---|---|---|
|
#18+
Не, ну MSDN я почитал прежде чем отвечать. А тестировать код МОЖНО ТОЛЬКО ПОСЛЕ того, как полностью разобрались, что он делает. Потому как внешние проявления кода не всегда совпадает с производимыми операциями. По поводу SetProcessWorkingSetSize: с ключами -1, -1 он всё-таки "выкидывает" код из памяти. Хотя согласен, с другими ключами он "ограничивает размер используемой процессом области памяти". А CoFreeUnusedLibraries и вправду полезна. Спасибо. Но интересно то не слепо выкинуть всё, что уже не используется. А посмотреть список того, что загружено (тика как Forms хранит все загруженные формы) и самому решить от чего избавляться. Да и для отладки полезно ингда знать в какой момент прога начинает загружать части кода в память. Если кто может помочь с этим, буду благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2006, 09:15 |
|
||
|
Как узнать, какие формы проекта висят в памяти?
|
|||
|---|---|---|---|
|
#18+
Если для отладки, то возможно вам помогут: 1. Утилита Spy++, входящая в состав VS 6.0 2. Команда ntsd, работу с которой я описывал здесь 3. Трассировка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2006, 09:59 |
|
||
|
Как узнать, какие формы проекта висят в памяти?
|
|||
|---|---|---|---|
|
#18+
Огромное спасибо. Очень полезные утилиты. :) Только вот возвращаясь к VB, а можно тоже самое получить из кода? Но не проверяя все процессы в поисках своего, а потом изучая его с пристрастием. А что-нибудь типа Forms только для загруженных dll, классов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2006, 10:23 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=33718350&tid=2165887]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
156ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 484ms |

| 0 / 0 |
