Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как узнать, какие формы проекта висят в памяти? / 14 сообщений из 14, страница 1 из 1
07.05.2006, 11:33
    #33714367
Rustygold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, какие формы проекта висят в памяти?
Господа, подскажите, пожалуйста, как бы это узнать:

Как узнать, какие формы, модули и контролы проекта висят в памяти?

Нужно для отладки и организации своевременного освобождения памяти.

Заранее спасибо.
...
Рейтинг: 0 / 0
07.05.2006, 12:57
    #33714441
Ламер Ламерович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, какие формы проекта висят в памяти?
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.
...
Рейтинг: 0 / 0
07.05.2006, 20:10
    #33714714
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, какие формы проекта висят в памяти?
Я так понимаю что под модулями автор имеет ввиду экземпляры пользовательских классов?
Желательно конечно с самого начала такие вещи отслеживать и взять себе это за привычку, иначе потому поиск забытых ссылок и хвостов тянет уйму врмени и нервов. Если проэкт небольшой то можно в принципе и в Locals посмотреть все что что не освобождено.

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

Большой проэкт?


Magnus
...
Рейтинг: 0 / 0
08.05.2006, 08:52
    #33714913
Rustygold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, какие формы проекта висят в памяти?
To Magnus23:

Проект большой (относительно, конечно).

авторЖелательно конечно с самого начала такие вещи отслеживать и взять себе это за привычку...

А что Вы имеете ввиду под "отслеживать"?
Мне приходит в голову только поставить флаг в каждый Form_Load и Form_Unload?

А как быть с "экземплярами пользовательских классов"?
(под "модулями" я их и понимаю, хотя для меня они скорее наборы глобальных функций и констант). Ведь при вызове одной функции/процедуры из модуля в память грузится весь модуль, а это, прошу прощения, фиг отследишь.

Вот и ищу: можно ли средствами отладки VB или (что лучше) каким-нибудь VB-шным классом или API-шной функцией посмотрей, что моя прога имет в памяти в произвольный момент времени?
...
Рейтинг: 0 / 0
08.05.2006, 10:52
    #33714978
Ламер Ламерович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, какие формы проекта висят в памяти?
Rustygold
А как быть с "экземплярами пользовательских классов"?
(под "модулями" я их и понимаю, хотя для меня они скорее наборы глобальных функций и констант).
Похоже вы путаете стандартные модули, которые и можно использовать как "наборы глобальных функций и констант" с модулями классов.
...
Рейтинг: 0 / 0
08.05.2006, 16:24
    #33715243
Rustygold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, какие формы проекта висят в памяти?
согласен. модули модулями, экземпляры классов экземплярами классов.
с классификацией вопросов нет.

вопрос-то в другом (см. выше)
...
Рейтинг: 0 / 0
08.05.2006, 19:10
    #33715401
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, какие формы проекта висят в памяти?
Нет, вопрос как раз принципиальный. Если это просто модули("наборы функций и констант") то они вообще ничего никуда не загружает. Другое дело с модулями классов, это как раз то о чем я говорил, т.е. отслеживание созданных экземпляров класса.

Для форм можно проверить коллекцию Forms, она содержит все ЗАГРУЖЕННЫЕ в данный момент формы.
Что же до пользовательских обьектов, то можно сделать простой счетчик и увеличивать его на 1 в конструкторе(Init) класса.

Под "отслеживать" я собственно имел ввиду уничтожать обьекты ручками, как только в них отпала необходимость. Т.е. если обьект нужен только локально в одной процедуре то и убиватье его при выходе из оной. Если нужен на форме то в form_unload. В конце концов это войдет в привычку и если четко определил для себя область видимости каждого обьекта то освобождать их не составит труда.

На счет автоматических средств... что то такое крутится в голове, но никак не могу вспомнить, я с васиком уже некоторое время не работаю, забывается...




Magnus
...
Рейтинг: 0 / 0
10.05.2006, 10:42
    #33716974
Melkiades
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, какие формы проекта висят в памяти?
Позволю себе вклиниться в ваш разговор. Автор хотел своевременно освобождать память - так вот, месяц назад я как раз рассказывал о
найденном мной способе .
...
Рейтинг: 0 / 0
10.05.2006, 16:42
    #33718350
Rustygold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, какие формы проекта висят в памяти?
Magnus23

Спасибо за объяснение.


Melkiades

Если я правильно понял, Ваш код выкидывает из оп.памяти текущий процесс - т.е. саму программу. Освобождение памяти во время простоя, возможно, иногда и актуально, но в данном случае нам(мне) интересно понять, как выгружать из памяти только неиспользуемые блоки, причём не в своп, а совсем.
...
Рейтинг: 0 / 0
10.05.2006, 17:05
    #33718423
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, какие формы проекта висят в памяти?
однако бейсик вам не C и не Java, он сам решает что и как освобождать, а ваше дело уничтожать объектные переменные:

Код: plaintext
Set obj = Nothing
...
Рейтинг: 0 / 0
10.05.2006, 17:13
    #33718452
Melkiades
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, какие формы проекта висят в памяти?
Rustygold
Если я правильно понял, Ваш код выкидывает из оп.памяти текущий процесс - т.е. саму программу. Освобождение памяти во время простоя, возможно, иногда и актуально, но в данном случае нам(мне) интересно понять, как выгружать из памяти только неиспользуемые блоки, причём не в своп, а совсем.
CoFreeUnusedLibraries и выкидывает из памяти неспользуемые блоки. Насовсем.
А SetProcessWorkingSetSize не выкидывает, а ограничивает размер используемой процессом области памяти, причем в любой момент времени, а не только в режиме простоя. Подробнее об этих функциях читайте в MSDN.
ЗЫ. Вы вообще пробовали предложенный код?
...
Рейтинг: 0 / 0
11.05.2006, 09:15
    #33719369
Rustygold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, какие формы проекта висят в памяти?
Не, ну MSDN я почитал прежде чем отвечать. А тестировать код МОЖНО ТОЛЬКО ПОСЛЕ того, как полностью разобрались, что он делает. Потому как внешние проявления кода не всегда совпадает с производимыми операциями.

По поводу SetProcessWorkingSetSize: с ключами -1, -1 он всё-таки "выкидывает" код из памяти. Хотя согласен, с другими ключами он "ограничивает размер используемой процессом области памяти".

А CoFreeUnusedLibraries и вправду полезна. Спасибо.



Но интересно то не слепо выкинуть всё, что уже не используется. А посмотреть список того, что загружено (тика как Forms хранит все загруженные формы) и самому решить от чего избавляться. Да и для отладки полезно ингда знать в какой момент прога начинает загружать части кода в память.

Если кто может помочь с этим, буду благодарен.
...
Рейтинг: 0 / 0
11.05.2006, 09:59
    #33719501
Melkiades
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, какие формы проекта висят в памяти?
Если для отладки, то возможно вам помогут:
1. Утилита Spy++, входящая в состав VS 6.0
2. Команда ntsd, работу с которой я описывал здесь
3. Трассировка.
...
Рейтинг: 0 / 0
11.05.2006, 10:23
    #33719594
Rustygold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, какие формы проекта висят в памяти?
Огромное спасибо. Очень полезные утилиты. :)

Только вот возвращаясь к VB, а можно тоже самое получить из кода?
Но не проверяя все процессы в поисках своего, а потом изучая его с пристрастием. А что-нибудь типа Forms только для загруженных dll, классов?
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как узнать, какие формы проекта висят в памяти? / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]