powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / При закрытии форма не выгружается из памяти
11 сообщений из 11, страница 1 из 1
При закрытии форма не выгружается из памяти
    #32283395
Фотография Chubaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совершенно случайно обратил внимание. Есть некий примитивный проект №1: 2 формы
у 1-ой только кнопка, вызывающая форму №2
Код: plaintext
1.
2.
3.
Private Sub Command1_Click()
    Form2.Show
End Sub

2-ая совершенно пустая
Запускаем проект, открываем TaskManager, наблюдаем следующую картину: при закрытии формы №2 память, занятая ею, не освобождается!!! А почему???

Проект №2: слегка видоизменим форму №2, добавим кнопку:
Код: plaintext
1.
2.
3.
Private Sub cmdExit_Click()
    Unload Me
End Sub

запускаем, глядим в TaskManager и видим что в момент закрытия формы с помощью Unload Me отъедается дополнительно килобайт 8 и снова память занятая формой №2 не освобождается.

Очень бы хотелось в своих проектах разрешать пользователям открывать по нескольку экземпляров одной и той же формы:
Код: plaintext
1.
2.
3.
4.
5.
Private Sub Command1_Click()
    Dim obj As Form2
    Set obj = New Form2
    obj.Show
End Sub

... но как-то очень это стремно, потому как открытие каждого нового экземпляра формы отъедает память, которая до закрытия проекта не освобождается.
Может у кого какие мысли есть по этому поводу, поделитесь если не жалко.
...
Рейтинг: 0 / 0
При закрытии форма не выгружается из памяти
    #32283805
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мысли :
Вместо cmdExit на второй форме в собтыие Form_QueryUnload на 1 форме можно поставить unload form2
По поводу памяти - 8К это принципиально для быстродействия вашего компа ?
...
Рейтинг: 0 / 0
При закрытии форма не выгружается из памяти
    #32283882
Фотография Chubaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Событие Form_QueryUnload происходит непосредственно перед событием Form_Unload, так что это немножко не то, т.к. память, занятую формой №2, надо освобождать после ее закрытия, а не после закрытия формы №1 (да и попробывал бы сам, ведь не работает твой вариант).
...
Рейтинг: 0 / 0
При закрытии форма не выгружается из памяти
    #32303837
DionX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как по-вашему:
допустим в ентой форме№2 есть переменная, объявленная:

Public tmp as string

При загрузки формы устанавливаем:

Private Sub Form_Load()
tmp = "Я ешо здеся!"
End Sub

На первой форме поставим ешо одно кнопочку и напишем:

Private Sub Command2_Click()
MsgBox Form2.tmp
End Sub

Запускаем нашего монстра. Жмём по первой кнопке. Фторая форма загрузилась (в этот момент значение tmp ,eltn = "Я ешо здеся!"). Закрываем енту форму№2. Каким способом не важно. Хоть с Unload Me, хоть без. Жмём на вторую кнопку на первой форме. Так... ВНИМАНИЕ!!! Как по вашему, что будет в окне сообщения? Не знаю как по вашему, но будет там "Я ешо здеся!", хотя форма выгружена, и переменной этой быть не должно в пямяти. Дело в том, что не выгружена она не хрена. Объект по-прежнему в форме.
А теперь о решении ентой праблемы:
Попробуйте в процедуру выгрузки формы написать Set form2=nothing... Ситуация изменитса, смею заверить.
...
Рейтинг: 0 / 0
При закрытии форма не выгружается из памяти
    #32304024
Hibernate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отследи события Form_Initialize и Form_Terminate и ты откроешь для себя много нового.

Попробуйте в процедуру выгрузки формы написать Set form2=nothing... Ситуация изменитса, смею заверить.

конечно, только после этого произойдет полная выгрузка класса формы. До этого Form_Terminate не отработает.
...
Рейтинг: 0 / 0
При закрытии форма не выгружается из памяти
    #32304044
DionX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>конечно, только после этого произойдет полная выгрузка класса формы.
Дык а этого, по-моему, Chubaka и надо
>>До этого Form_Terminate не отработает
до чего "до этого"?
...
Рейтинг: 0 / 0
При закрытии форма не выгружается из памяти
    #32304564
Hibernate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
до чего "до этого"?

до Set form2=nothing
...
Рейтинг: 0 / 0
При закрытии форма не выгружается из памяти
    #32305528
DionX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
до чего "до этого"?

до Set form2=nothing


Да? Ну, тогда тебе самому следует последить за этим событием, и "ты откроешь для себя много нового"
...
Рейтинг: 0 / 0
При закрытии форма не выгружается из памяти
    #32306146
Hibernate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DionX:
ну в чем проблема!?
когда ты обращаешься к форме по ее имени, VB создает (заместо тебя, заметь) объектную переменную и держит ее до тех пор пока ты ему явно не скажешь ее освободить.
попробуй вместо "ленивого"(и по-моему кривого) кода
Код: plaintext
Form2.Show
написать так:
Код: plaintext
1.
2.
dim frm as Form2
Set frm=new Form2
frm.show

уверяю тебя, описанной тобой ситуации не будет, поскольку объектная переменная и время ее жизни явно определены программистом. И стоит закрыть форму, как класс формы будет выгружен из памяти.
...
Рейтинг: 0 / 0
При закрытии форма не выгружается из памяти
    #32306847
DionX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Hibernate
в описанной тобой ситуации полностью согласен. но обратись к началу ентого форума, Chubaka открывал (открывала?) именно методом form2.show. О создании экземпляра класса формы только говорилось как о желаемом. Всё равно, признаю твою победу :-))))
...
Рейтинг: 0 / 0
При закрытии форма не выгружается из памяти
    #32307671
Hibernate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2DionX:
Всё равно, признаю твою победу
охотно делюсь ею с тобой - ты дал соврешенно правильный ответ (Set Form2=Nothing) для решения проблемы, просто преподнес его под несколько некорректным соусом :-).
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / При закрытии форма не выгружается из памяти
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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