Контролы отъедают память.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Контролы отъедают память.

Сообщение Antonariy » 30.06.2005 (Чт) 12:06

Сделал несколько контролов и оформил в отдельный ocx. Стал замечать, что открытие форм с большим количеством оных стало потихоньку съедать память. Как с этим бороться?

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 30.06.2005 (Чт) 12:14

Что ты имеешь в виду под "съедать"? То, что при открытии формы у тебя уменьшается объем свободной памяти, или то, что после закрытия формы он у тебя обратно не увеличивается?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 30.06.2005 (Чт) 12:27

Второе, естетственно.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 30.06.2005 (Чт) 13:00

Эт-та хорошо, что второе. :twisted:
Дальше, видимо, придется рассказывать, чем занимаются твои контролы. Я не специалист в области работы с памятью, но краем глаза слышал, что, мол, в VB проблемы с памятью решаются самим VB, а не программистом. Интересно было бы узнать, действительно ли это так :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 30.06.2005 (Чт) 13:16

Контролы - кнопки, текстбоксы, комбобоксы, фреймы. Один из них приаттачен.
Вложения
bc.rar
(4.3 Кб) Скачиваний: 30

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 01.07.2005 (Пт) 8:45

Контролы не содержат классов или объектных ссылок, только немного графики.

Никаких идей?

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 01.07.2005 (Пт) 21:45

Antonariy писал(а):Контролы не содержат классов или объектных ссылок, только немного графики.

:shock: А по личному таймеру на каждую кнопку? Каждый контрол имеет Таймер, Клипер, Лейбл и Шейп (Без двух последних - обойтись-раз плюнуть).
А насчет таймеров: Если не хочешь использовать Хуки - то попробуй обойтись одним таймером для всех кнопок (общим). Если надо - то могу поделиться примерчиком.
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 04.07.2005 (Пн) 9:45

В одном вопросе разобрался, возник новый =/
Хотя, ошибки о нехватке памяти возникали в осх, причина не он, а пара юзерконтролов в самом экзешнике. Один из них содержит два других и на форме он является массивом. Они-то как раз содержат штук по пять объектных переменных, которые очищаются в UserControl_Terminate. Беда в том, что UserControl_Terminate срабатывает только после закрытия программы, а не формы. Причем в форме массиву делается принудительный анлоад.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 04.07.2005 (Пн) 11:05

Set Object = Nothing при закрытии форм

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 04.07.2005 (Пн) 11:33

Какой Object? Если ты про объект самой формы, то так и делаю. Form_Unload срабатывает, в цикле делаю принудительно Unload массиву контролов, UserControl_Terminate молчит.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 04.07.2005 (Пн) 11:51

http://bbs.vbstreets.ru/viewtopic.php?t=17521

Тема на _этой же_ странице.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 04.07.2005 (Пн) 11:53

я кажется уже предлагал использовать принудительно вызов отдельного метода TerminateMe() при QueryUnload формы:

Код: Выделить всё
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

Me.MyUserControl.TerminateMe

end sub


а в иетоде TerminateMe убивай все свои коллекции контролов и освобождай переменные.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 04.07.2005 (Пн) 11:58

Видимо так и придется делать.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 04.07.2005 (Пн) 12:07

http://support.microsoft.com/default.aspx?scid=kb;en-us;320106
Кажется это имеет отношение к проблеме.

Sur
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 91
Зарегистрирован: 14.07.2003 (Пн) 20:54
Откуда: C2H5OH

Сообщение Sur » 07.07.2005 (Чт) 14:00

Попробуй чистильщиков памяти
Private Declare Sub CoFreeUnusedLibraries Lib "ole32" ()
Private Declare Function SetProcessWorkingSetSize Lib "kernel32" (ByVal hProcess As Long, ByVal dwMinimumWorkingSetSize As Long, ByVal dwMaximumWorkingSetSize As Long) As Long


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 73

    TopList  
cron