Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Старая песня о главном (memory leak) / 12 сообщений из 12, страница 1 из 1
01.07.2005, 13:42:00
    #33145020
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Старая песня о главном (memory leak)
Открываю формы самым правильным способом

Код: 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
01.07.2005, 15:08:48
    #33145318
Melkiades
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Старая песня о главном (memory leak)
Windows 98?
Как происходит выгрузка контролов? Коллекции очищаются?
...
Рейтинг: 0 / 0
01.07.2005, 17:11:24
    #33145713
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Старая песня о главном (memory leak)
1. w2k/xp и, думаю, везде
2. Пробовал и в покое оставлять и ручками Unload им делать - монописуально.
3. Коллекций нет.
...
Рейтинг: 0 / 0
01.07.2005, 17:31:06
    #33145764
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Старая песня о главном (memory leak)
была похожая история с ocx-ом у которого внутри был webbrowser
чем больше открывал окон с таким ocx-ом , тем больше жралась память и не выгружалась. лечил с помощью отдельного метода UnloadMe (или как угодно назови) в самом ocx-е, где принудительно обнулял все переменные , связанные с браузером и делал в конце загрузку ему about:blank . вызов этого метода вставлял в терминэйт контрола и еще в метод queryunload формы, в котором он сидел.
...
Рейтинг: 0 / 0
01.07.2005, 17:32:47
    #33145772
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Старая песня о главном (memory leak)
кстати, ты проверял только на своем рабочем компе или еще где?
...
Рейтинг: 0 / 0
01.07.2005, 17:37:44
    #33145787
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Старая песня о главном (memory leak)
Попробуй
set f=nothing

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


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

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

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


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