powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Старая песня о главном (memory leak)
12 сообщений из 12, страница 1 из 1
Старая песня о главном (memory leak)
    #33145020
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открываю формы самым правильным способом

Код: plaintext
1.
2.
3.
4.
5.
Private Sub Command1_Click()
Dim f As Form
    Set f = New frmTest
    f.Show
    Set f = Nothing
End Sub

размер проги в памяти потихоньку растет, однако после закрытия почти не уменьшается. Чем больше на ней контролов, тем ситуация хуже. Ситуация еще хуже, когда контролы самописные и находятся в отдельном ocx. А когда они добавляются на форму динамически - вообще жопа. Форму можно открыть раз семь, после этого с трудом вылазит ошибка Out of memory. Причем она происходит внутри одного из самописных контролов при изменении какого-нибудь свойства. Контролы не содержат объектных переменных, чисто графика - кнопки, чекбоксы, фреймы, дропдауны.

ЧТО ДЕЛАТЬ???
...
Рейтинг: 0 / 0
Старая песня о главном (memory leak)
    #33145318
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Windows 98?
Как происходит выгрузка контролов? Коллекции очищаются?
...
Рейтинг: 0 / 0
Старая песня о главном (memory leak)
    #33145713
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. w2k/xp и, думаю, везде
2. Пробовал и в покое оставлять и ручками Unload им делать - монописуально.
3. Коллекций нет.
...
Рейтинг: 0 / 0
Старая песня о главном (memory leak)
    #33145764
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
была похожая история с ocx-ом у которого внутри был webbrowser
чем больше открывал окон с таким ocx-ом , тем больше жралась память и не выгружалась. лечил с помощью отдельного метода UnloadMe (или как угодно назови) в самом ocx-е, где принудительно обнулял все переменные , связанные с браузером и делал в конце загрузку ему about:blank . вызов этого метода вставлял в терминэйт контрола и еще в метод queryunload формы, в котором он сидел.
...
Рейтинг: 0 / 0
Старая песня о главном (memory leak)
    #33145772
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, ты проверял только на своем рабочем компе или еще где?
...
Рейтинг: 0 / 0
Старая песня о главном (memory leak)
    #33145787
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй
set f=nothing

(обнуление памяти, занимаемой под формой.) Но желательно форму кэтому времени выгрузить, но я пишу последним делом в Unload
...
Рейтинг: 0 / 0
Старая песня о главном (memory leak)
    #33145813
Toking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторPrivate Sub Command1_Click()
Dim f As Form
Set f = New frmTest
f.Show
Set f = Nothing
End Sub


Этот метод правильный если форма модальная ... иначе она тут же должна выгрузиться (или я не прав?)

Динамически добавляя компоненты, не забываем их динамически удалять?

Как обстоят дела со стандартными контролами?
...
Рейтинг: 0 / 0
Старая песня о главном (memory leak)
    #33145826
Один1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aklin(обнуление памяти, занимаемой под формой.) Это НЕ "обнуление памяти". Это декремент указателя на переменную класса. Форма выгрузится, когда все переменные, ссылающиеся на нее, станут Nothing. В частности, если UseControl-ы, находящиеся на форме, хранят в себе ссылку на эту же самую форму, то... может произойти все, что угодно при Set f = Nothing. От контролов зависит.
...
Рейтинг: 0 / 0
Старая песня о главном (memory leak)
    #33147355
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В одном вопросе разобрался, возник новый =/
Хотя, ошибки о нехватке памяти возникали в осх, причина не он, а пара юзерконтролов в самом экзешнике. Один из них содержит два других и на форме он является массивом. Они-то как раз содержат штук по пять объектных переменных, которые очищаются в UserControl_Terminate. Беда в том, что UserControl_Terminate срабатывает только после закрытия программы, а не формы. Причем в форме массиву делается принудительный анлоад.
...
Рейтинг: 0 / 0
Старая песня о главном (memory leak)
    #33147508
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyБеда в том, что UserControl_Terminate срабатывает только после закрытия программы, а не формы.
Да, да, и UsecControl_Initialize без параметров ;-P
Тоже натыкался на эти грабли. А так надеялся что не придется писать эти дурацкие самописные SetInitialized и SetTerminated !
...
Рейтинг: 0 / 0
Старая песня о главном (memory leak)
    #33147517
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(плачу в жылетку...)
...
Рейтинг: 0 / 0
Старая песня о главном (memory leak)
    #33147775
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажется это имеет отношение к проблеме.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Старая песня о главном (memory leak)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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