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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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




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

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


Melkiades

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

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

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

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



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

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

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


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