powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Утечка памяти, как посмотреть список загруженных в память UserControl-s
26 сообщений из 26, показаны все 2 страниц
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36158187
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VB6

При некоторых обстоятельствах (если кому-то интересно, напишу каких) возникает такая ситуация: юзерконтрол остается загруженным в память, несмотря на то, что форма, на котором он был расположен, выгружается из памяти. Контрол таким образом "повисает в воздухе". Если открыть/закрыть эту форму еще раз, повиснет еще один экземпляр. Если контрол "тяжелый" а форму открывают часто, через некоторое время возникает "OutOfMemory" и приложение падает.

Как сделать так, чтобы этого не происходило, я разобрался и в новых формах этого уже не будет. Однако, проект большой и умозрительно просмотреть все старые формы на предмет зависающих контролов нереально. Проще помониторить память на эту тему, но не знаю, как это сделать, подскажите плиз.
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36165026
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
up :(
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36221602
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
up
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36221874
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Ну смотрите, вам нужно обойти все формы и найти на них все usercontrol's, так все они потенциальны будут загружены в память. ОБойти можно попробовать через VB IDE.
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36221896
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит ОБОЙТИ? Руками перетряхнуть?

в проекте полторы сотни форм и тысячи контролов на них
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36221905
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Во-первых, я написал , что можно через VB IDE. Для VBA - это возможно через VBIDE ( программный доступ к проекту)
Во-вторых, можно обойти ( не руками, а программно) все файлы *.frm ( или *.frx) и найти в них определения UserControls.
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36221914
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не понял, допустим я нашел все определения. Что мне с ними делать дальше? Моя задача найти все, что осталось в памяти в рантайме.
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36221921
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Ну смотрите. Я предположил, что вы через файлы найдете все usercontrols и добавите для них код, исключающий утечку памяти.
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36221931
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я и так могу найти все юзерконтролы, они все лежат в отдельном проекте в группе. Проблема в том, что "зависание" контрола в памяти НЕ ЗАВИСИТ от кода самого контрола, а зависит от кода формы или класса, из-за которых контрол не был терминирован извне автоматически средой выполнения.
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36222126
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Shocker.Pro
> Я и так могу найти все юзерконтролы, они все лежат в отдельном проекте в группе. Проблема в том, что "зависание"
> контрола в памяти НЕ ЗАВИСИТ от кода самого контрола, а зависит от кода формы или класса, из-за которых контрол не был
> терминирован извне автоматически средой выполнения.

Пройдись по всем классам и добавь логирование в Initialize и Terminate, потом проанализируй получившийся лог, на предмет
есть запись о создании объекта - нет записи об уничтожении, и вычмсляй, где они создаются и почему не освобождаются.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36222216
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Утечки памяти происходят при загрузке-выгрузке форм и юзерконтролов. Полторы сотни форм в VB6 это слишком круто для него. Утечки будут даже в идеально вылизанном проекте, они есть даже в проектах с одной формой, просто до какого-то предела они несущественны и с ними можно мириться.

Можно уменьшить утечки, если юзерконтролы засунуть в отдельный ocx.

Jah loves you.
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36222290
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
Пройдись по всем классам и добавь логирование в Initialize и Terminate, потом проанализируй получившийся лог, на предмет
есть запись о создании объекта - нет записи об уничтожении, и вычмсляй, где они создаются и почему не освобождаются.

Ну это, конечно, первое, что приходит в голову, просто достаточно трудоемко. Я предполагаю, что есть какой-то простой доступ к "куче", или как там называется вся совокупность созданных объектов...

AntonariyУтечки памяти происходят при загрузке-выгрузке форм и юзерконтролов. Полторы сотни форм в VB6 это слишком круто для него. Утечки будут даже в идеально вылизанном проекте, они есть даже в проектах с одной формой, просто до какого-то предела они несущественны и с ними можно мириться.

Можно уменьшить утечки, если юзерконтролы засунуть в отдельный ocx.


Контролы засунуты в отдельный ocx.
Просто есть утечки, с которыми легко побороться, стоит только их идентифицировать.
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36222311
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создайте проект с пустой формой, модулем и скомпилируйте проект.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Sub Main()
For x =  1  To  1000 
    Load Form1
    Form1.Show
    Unload Form1
    DoEvents
Next
MsgBox "done"
End Sub
Внимательно наблюдайте за расходом памяти, а потом попробуйте устранить утечку.

Jah loves you.
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36222359
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyВнимательно наблюдайте за расходом памяти, а потом попробуйте устранить утечку.


Зачем вы передергиваете?
Свою проблему я изложил в первом посте.

Человек спокойно работает в этом проекте весь рабочий день, буквально СОТНИ раз открывая и закрывая формы, в который нет указанной мной проблемы и проблем не наблюдается.

В то же время открывая формы, точно обладающие указанной мной проблемой, на десятый раз открытия этой формы, он получает "Out Of Memory" или "Отправить отчет..."

Соответственно, я хочу вычислить те формы, которые обладают такой проблемой, но я об этом не знаю, потому что либо их редко используют, либо зависающие в памяти контролы не такие тяжелые.

P.S. Указанная вами утечка хорошо проявлялась на win95/98, начиная с 2000-х этот момент заметно пофиксили...
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36222383
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyВнимательно наблюдайте за расходом памяти, а потом попробуйте устранить утечку.


Сделал. Расход памяти (той, которую показывает диспетчер задач) не пронаблюдал.

Подскажите, куда смотреть, чтобы увидеть.
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36222591
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЗачем вы передергиваете?Зачем вы инкриминируете мне то, чего я не делаю?
Свою проблему я изложил в первом посте.Я заметил. Ваша проблема не имеет решения. Вернее имеет одно решение и одно недорешение, но вас они не устроят.
1) Переход на другую платформу.
2) Разнесение логики на 2 и более разных форм.

точно обладающие указанной мной проблемойВсе формы обладают этой проблемой, какие-то больше, какие-то меньше. Особенно имеют те, где используется динамическое создание контролов.

Указанная вами утечка хорошо проявлялась на win95/98, начиная с 2000-х этот момент заметно пофиксили...К версии Windows она не имеет отношения, пофиксили движок VB. Какой версии у вас MSVBVM60.DLL? Последняя 6.0.97.82, проверьте заодно у клиентов.

Сделал. Расход памяти (той, которую показывает диспетчер задач) не пронаблюдал.

Подскажите, куда смотреть, чтобы увидеть.Смотреть именно там, у меня расход был пару килобайт. Можно цикл увеличить или контролов накидать чтобы заметнее было.

Jah loves you.
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36222614
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати Out Of Memory это не утечка, это ваш рукотворный баг. При больших утечках проект просто вылетает с непредвиденной ошибкой и попыткой отправить отчет самизнаетекуда.
Воспользуйтесь советом Игоря и добавьте счетчик инициализаций/удалений контролов.

Jah loves you.
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36222649
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyЗачем вы инкриминируете мне то, чего я не делаю?
AntonariyВсе формы обладают этой проблемой, какие-то больше, какие-то меньше. Особенно имеют те, где используется динамическое создание контролов.

Извините, вы не передергиваете, вы просто игнорируете топовый пост. В результате вы достаете проблему, которую я не поднимал , и пытаетесь предложить решение, которое мне не нужно.

Есть конкретная проблема, с конкретной утечкой памяти, которую можно решить конкретным способом. А с общей философией утечки памяти в VB - это в другую ветку.

AntonariyShockerСвою проблему я изложил в первом посте.Я заметил. Ваша проблема не имеет решения.

еще раз повторяю - моя проблема решение имеет - достаточно очистить указатель при закрытии формы. Мне всего лишь нужен был легкий способ определить меcта, где ее исправлять.

AntonariyСмотреть именно там, у меня расход был пару килобайт. Можно цикл увеличить или контролов накидать чтобы заметнее было.

Изложенная мной в топпосте проблема не связана с утечкой памяти, выделенной приложению, которую видно в диспетчере задач (потому никакого существенного увеличения памяти перед падением программы в диспетчере задач не наблюдается). Видимо, заканчивается какая-то конкретная область памяти, выделенная средой исполнения для юзерконтролов.
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36222663
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, в Initialize нужно добавить увеличение счетчика, в Terminate — уменьшение. При закрытии формы счетчик должен быть равен нулю.

Jah loves you.
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36222911
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Shocker.Pro
> Ну это, конечно, первое, что приходит в голову, просто достаточно трудоемко.

Т.е. ты хочешь сказать, что такой большой проект не снабжен средствами логирования происходящих действий?
Ну если все делать руками, это конечно долго, напиши програмку, которая будет открыввать *.frm *.cls и др. и добавлять 2
метода, если их там ещё нет с определенным кодом, если методы есть, то просто определенный код логирования и все, делов
на пару часов.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36236313
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
> Автор: Shocker.Pro
> Ну это, конечно, первое, что приходит в голову, просто достаточно трудоемко.

Т.е. ты хочешь сказать, что такой большой проект не снабжен средствами логирования происходящих действий?
Ну если все делать руками, это конечно долго, напиши програмку, которая будет открыввать *.frm *.cls и др. и добавлять 2
метода, если их там ещё нет с определенным кодом, если методы есть, то просто определенный код логирования и все, делов
на пару часов.


Не снабжен за ненадобностью. Обработка данных логируется (при необходимости) на SQL-сервере, это всего лишь клиент.

Ну что ж, значит придется сделать. Просто в папке, которую создает энтерпрайз-студия при установке, есть куча утилит, назначение которых я представляю себе довольно смутно. Вот и предполагал, что там должно быть что-то готовое для мониторинга объектов в памяти с целью отладки.
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36236534
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProСоответственно, я хочу вычислить те формы, которые обладают такой проблемой, но я об этом не знаю, потому что либо их редко используют, либо зависающие в памяти контролы не такие тяжелые.

Зависший контрол не даст выгрузиться своей форме. Соответственно можно просто логировать время Inizialisaze/Terminate форм (как тут уже говорилось) - лучше в табличку (хотя бы в MDB). Соответственно по ней будет видно какие формы остались открыты в зависшем приложении и уже можно будет делать выводы...
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36236906
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrFЗависший контрол не даст выгрузиться своей форме. Соответственно можно просто логировать время Inizialisaze/Terminate форм (как тут уже говорилось) - лучше в табличку (хотя бы в MDB). Соответственно по ней будет видно какие формы остались открыты в зависшем приложении и уже можно будет делать выводы...

1) читайте тему с первого поста! ФОРМА ВЫГРУЖАЕТСЯ. Terminate у формы СРАБАТЫВАЕТ. Не выгружается именно контрол.

2) для описанного вами случая городить огород не требуется, достаточно заглянуть в коллекцию Forms
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36237475
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro1) читайте тему с первого поста! ФОРМА ВЫГРУЖАЕТСЯ. Terminate у формы СРАБАТЫВАЕТ. Не выгружается именно контрол.

Именно контрол или компонент? CDO, к примеру, в свое время довольно усердно жрало память до полного ее исчерпания (может и сейчас жрет - давненько на этот счет не пробовал)...
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36237536
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrFИменно контрол или компонент?

ActiveX UserControl
...
Рейтинг: 0 / 0
Утечка памяти, как посмотреть список загруженных в память UserControl-s
    #36514383
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, поковырялся сам методом тыка в Spy++, нашел, где их отслеживать

При запуске приложения VB6 в корне (прямом подчинении десктопу) появляется окно без заголовка с классом(?) Static. Тут появляются все юзерконтролы с режимом InvisibleAtRuntime=True, а также те самые "потерянные" контролы (потерявшие форму, на которой они были расположены)
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Утечка памяти, как посмотреть список загруженных в память UserControl-s
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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