Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
VB6 При некоторых обстоятельствах (если кому-то интересно, напишу каких) возникает такая ситуация: юзерконтрол остается загруженным в память, несмотря на то, что форма, на котором он был расположен, выгружается из памяти. Контрол таким образом "повисает в воздухе". Если открыть/закрыть эту форму еще раз, повиснет еще один экземпляр. Если контрол "тяжелый" а форму открывают часто, через некоторое время возникает "OutOfMemory" и приложение падает. Как сделать так, чтобы этого не происходило, я разобрался и в новых формах этого уже не будет. Однако, проект большой и умозрительно просмотреть все старые формы на предмет зависающих контролов нереально. Проще помониторить память на эту тему, но не знаю, как это сделать, подскажите плиз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2009, 16:16 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
up :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2009, 23:46 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
up ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2009, 23:10 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, Ну смотрите, вам нужно обойти все формы и найти на них все usercontrol's, так все они потенциальны будут загружены в память. ОБойти можно попробовать через VB IDE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 09:34 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
Что значит ОБОЙТИ? Руками перетряхнуть? в проекте полторы сотни форм и тысячи контролов на них ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 09:41 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, Во-первых, я написал , что можно через VB IDE. Для VBA - это возможно через VBIDE ( программный доступ к проекту) Во-вторых, можно обойти ( не руками, а программно) все файлы *.frm ( или *.frx) и найти в них определения UserControls. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 09:48 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
Я не понял, допустим я нашел все определения. Что мне с ними делать дальше? Моя задача найти все, что осталось в памяти в рантайме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 09:57 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, Ну смотрите. Я предположил, что вы через файлы найдете все usercontrols и добавите для них код, исключающий утечку памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 09:59 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
Я и так могу найти все юзерконтролы, они все лежат в отдельном проекте в группе. Проблема в том, что "зависание" контрола в памяти НЕ ЗАВИСИТ от кода самого контрола, а зависит от кода формы или класса, из-за которых контрол не был терминирован извне автоматически средой выполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 10:08 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
> Автор: Shocker.Pro > Я и так могу найти все юзерконтролы, они все лежат в отдельном проекте в группе. Проблема в том, что "зависание" > контрола в памяти НЕ ЗАВИСИТ от кода самого контрола, а зависит от кода формы или класса, из-за которых контрол не был > терминирован извне автоматически средой выполнения. Пройдись по всем классам и добавь логирование в Initialize и Terminate, потом проанализируй получившийся лог, на предмет есть запись о создании объекта - нет записи об уничтожении, и вычмсляй, где они создаются и почему не освобождаются. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 11:30 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
Утечки памяти происходят при загрузке-выгрузке форм и юзерконтролов. Полторы сотни форм в VB6 это слишком круто для него. Утечки будут даже в идеально вылизанном проекте, они есть даже в проектах с одной формой, просто до какого-то предела они несущественны и с ними можно мириться. Можно уменьшить утечки, если юзерконтролы засунуть в отдельный ocx. Jah loves you. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 11:56 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос Пройдись по всем классам и добавь логирование в Initialize и Terminate, потом проанализируй получившийся лог, на предмет есть запись о создании объекта - нет записи об уничтожении, и вычмсляй, где они создаются и почему не освобождаются. Ну это, конечно, первое, что приходит в голову, просто достаточно трудоемко. Я предполагаю, что есть какой-то простой доступ к "куче", или как там называется вся совокупность созданных объектов... AntonariyУтечки памяти происходят при загрузке-выгрузке форм и юзерконтролов. Полторы сотни форм в VB6 это слишком круто для него. Утечки будут даже в идеально вылизанном проекте, они есть даже в проектах с одной формой, просто до какого-то предела они несущественны и с ними можно мириться. Можно уменьшить утечки, если юзерконтролы засунуть в отдельный ocx. Контролы засунуты в отдельный ocx. Просто есть утечки, с которыми легко побороться, стоит только их идентифицировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 12:15 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
Создайте проект с пустой формой, модулем и скомпилируйте проект. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Jah loves you. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 12:23 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
AntonariyВнимательно наблюдайте за расходом памяти, а потом попробуйте устранить утечку. Зачем вы передергиваете? Свою проблему я изложил в первом посте. Человек спокойно работает в этом проекте весь рабочий день, буквально СОТНИ раз открывая и закрывая формы, в который нет указанной мной проблемы и проблем не наблюдается. В то же время открывая формы, точно обладающие указанной мной проблемой, на десятый раз открытия этой формы, он получает "Out Of Memory" или "Отправить отчет..." Соответственно, я хочу вычислить те формы, которые обладают такой проблемой, но я об этом не знаю, потому что либо их редко используют, либо зависающие в памяти контролы не такие тяжелые. P.S. Указанная вами утечка хорошо проявлялась на win95/98, начиная с 2000-х этот момент заметно пофиксили... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 12:37 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
AntonariyВнимательно наблюдайте за расходом памяти, а потом попробуйте устранить утечку. Сделал. Расход памяти (той, которую показывает диспетчер задач) не пронаблюдал. Подскажите, куда смотреть, чтобы увидеть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 12:42 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
Shocker.ProЗачем вы передергиваете?Зачем вы инкриминируете мне то, чего я не делаю? Свою проблему я изложил в первом посте.Я заметил. Ваша проблема не имеет решения. Вернее имеет одно решение и одно недорешение, но вас они не устроят. 1) Переход на другую платформу. 2) Разнесение логики на 2 и более разных форм. точно обладающие указанной мной проблемойВсе формы обладают этой проблемой, какие-то больше, какие-то меньше. Особенно имеют те, где используется динамическое создание контролов. Указанная вами утечка хорошо проявлялась на win95/98, начиная с 2000-х этот момент заметно пофиксили...К версии Windows она не имеет отношения, пофиксили движок VB. Какой версии у вас MSVBVM60.DLL? Последняя 6.0.97.82, проверьте заодно у клиентов. Сделал. Расход памяти (той, которую показывает диспетчер задач) не пронаблюдал. Подскажите, куда смотреть, чтобы увидеть.Смотреть именно там, у меня расход был пару килобайт. Можно цикл увеличить или контролов накидать чтобы заметнее было. Jah loves you. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 13:46 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
Кстати Out Of Memory это не утечка, это ваш рукотворный баг. При больших утечках проект просто вылетает с непредвиденной ошибкой и попыткой отправить отчет самизнаетекуда. Воспользуйтесь советом Игоря и добавьте счетчик инициализаций/удалений контролов. Jah loves you. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 13:51 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
AntonariyЗачем вы инкриминируете мне то, чего я не делаю? AntonariyВсе формы обладают этой проблемой, какие-то больше, какие-то меньше. Особенно имеют те, где используется динамическое создание контролов. Извините, вы не передергиваете, вы просто игнорируете топовый пост. В результате вы достаете проблему, которую я не поднимал , и пытаетесь предложить решение, которое мне не нужно. Есть конкретная проблема, с конкретной утечкой памяти, которую можно решить конкретным способом. А с общей философией утечки памяти в VB - это в другую ветку. AntonariyShockerСвою проблему я изложил в первом посте.Я заметил. Ваша проблема не имеет решения. еще раз повторяю - моя проблема решение имеет - достаточно очистить указатель при закрытии формы. Мне всего лишь нужен был легкий способ определить меcта, где ее исправлять. AntonariyСмотреть именно там, у меня расход был пару килобайт. Можно цикл увеличить или контролов накидать чтобы заметнее было. Изложенная мной в топпосте проблема не связана с утечкой памяти, выделенной приложению, которую видно в диспетчере задач (потому никакого существенного увеличения памяти перед падением программы в диспетчере задач не наблюдается). Видимо, заканчивается какая-то конкретная область памяти, выделенная средой исполнения для юзерконтролов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 14:02 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
В общем, в Initialize нужно добавить увеличение счетчика, в Terminate — уменьшение. При закрытии формы счетчик должен быть равен нулю. Jah loves you. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 14:05 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
> Автор: Shocker.Pro > Ну это, конечно, первое, что приходит в голову, просто достаточно трудоемко. Т.е. ты хочешь сказать, что такой большой проект не снабжен средствами логирования происходящих действий? Ну если все делать руками, это конечно долго, напиши програмку, которая будет открыввать *.frm *.cls и др. и добавлять 2 метода, если их там ещё нет с определенным кодом, если методы есть, то просто определенный код логирования и все, делов на пару часов. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 15:19 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос > Автор: Shocker.Pro > Ну это, конечно, первое, что приходит в голову, просто достаточно трудоемко. Т.е. ты хочешь сказать, что такой большой проект не снабжен средствами логирования происходящих действий? Ну если все делать руками, это конечно долго, напиши програмку, которая будет открыввать *.frm *.cls и др. и добавлять 2 метода, если их там ещё нет с определенным кодом, если методы есть, то просто определенный код логирования и все, делов на пару часов. Не снабжен за ненадобностью. Обработка данных логируется (при необходимости) на SQL-сервере, это всего лишь клиент. Ну что ж, значит придется сделать. Просто в папке, которую создает энтерпрайз-студия при установке, есть куча утилит, назначение которых я представляю себе довольно смутно. Вот и предполагал, что там должно быть что-то готовое для мониторинга объектов в памяти с целью отладки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2009, 01:25 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
Shocker.ProСоответственно, я хочу вычислить те формы, которые обладают такой проблемой, но я об этом не знаю, потому что либо их редко используют, либо зависающие в памяти контролы не такие тяжелые. Зависший контрол не даст выгрузиться своей форме. Соответственно можно просто логировать время Inizialisaze/Terminate форм (как тут уже говорилось) - лучше в табличку (хотя бы в MDB). Соответственно по ней будет видно какие формы остались открыты в зависшем приложении и уже можно будет делать выводы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2009, 09:37 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
AndrFЗависший контрол не даст выгрузиться своей форме. Соответственно можно просто логировать время Inizialisaze/Terminate форм (как тут уже говорилось) - лучше в табличку (хотя бы в MDB). Соответственно по ней будет видно какие формы остались открыты в зависшем приложении и уже можно будет делать выводы... 1) читайте тему с первого поста! ФОРМА ВЫГРУЖАЕТСЯ. Terminate у формы СРАБАТЫВАЕТ. Не выгружается именно контрол. 2) для описанного вами случая городить огород не требуется, достаточно заглянуть в коллекцию Forms ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2009, 11:36 |
|
||
|
Утечка памяти, как посмотреть список загруженных в память UserControl-s
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro1) читайте тему с первого поста! ФОРМА ВЫГРУЖАЕТСЯ. Terminate у формы СРАБАТЫВАЕТ. Не выгружается именно контрол. Именно контрол или компонент? CDO, к примеру, в свое время довольно усердно жрало память до полного ее исчерпания (может и сейчас жрет - давненько на этот счет не пробовал)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2009, 14:15 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=36222614&tid=2160054]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 384ms |

| 0 / 0 |
