|
При закрытии форма не выгружается из памяти
|
|||
---|---|---|---|
#18+
Совершенно случайно обратил внимание. Есть некий примитивный проект №1: 2 формы у 1-ой только кнопка, вызывающая форму №2 Код: plaintext 1. 2. 3.
2-ая совершенно пустая Запускаем проект, открываем TaskManager, наблюдаем следующую картину: при закрытии формы №2 память, занятая ею, не освобождается!!! А почему??? Проект №2: слегка видоизменим форму №2, добавим кнопку: Код: plaintext 1. 2. 3.
запускаем, глядим в TaskManager и видим что в момент закрытия формы с помощью Unload Me отъедается дополнительно килобайт 8 и снова память занятая формой №2 не освобождается. Очень бы хотелось в своих проектах разрешать пользователям открывать по нескольку экземпляров одной и той же формы: Код: plaintext 1. 2. 3. 4. 5.
... но как-то очень это стремно, потому как открытие каждого нового экземпляра формы отъедает память, которая до закрытия проекта не освобождается. Может у кого какие мысли есть по этому поводу, поделитесь если не жалко. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2003, 15:13 |
|
При закрытии форма не выгружается из памяти
|
|||
---|---|---|---|
#18+
Мысли : Вместо cmdExit на второй форме в собтыие Form_QueryUnload на 1 форме можно поставить unload form2 По поводу памяти - 8К это принципиально для быстродействия вашего компа ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2003, 20:18 |
|
При закрытии форма не выгружается из памяти
|
|||
---|---|---|---|
#18+
Событие Form_QueryUnload происходит непосредственно перед событием Form_Unload, так что это немножко не то, т.к. память, занятую формой №2, надо освобождать после ее закрытия, а не после закрытия формы №1 (да и попробывал бы сам, ведь не работает твой вариант). ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2003, 23:32 |
|
При закрытии форма не выгружается из памяти
|
|||
---|---|---|---|
#18+
Как по-вашему: допустим в ентой форме№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... Ситуация изменитса, смею заверить. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2003, 08:01 |
|
При закрытии форма не выгружается из памяти
|
|||
---|---|---|---|
#18+
отследи события Form_Initialize и Form_Terminate и ты откроешь для себя много нового. Попробуйте в процедуру выгрузки формы написать Set form2=nothing... Ситуация изменитса, смею заверить. конечно, только после этого произойдет полная выгрузка класса формы. До этого Form_Terminate не отработает. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2003, 11:23 |
|
При закрытии форма не выгружается из памяти
|
|||
---|---|---|---|
#18+
>>конечно, только после этого произойдет полная выгрузка класса формы. Дык а этого, по-моему, Chubaka и надо >>До этого Form_Terminate не отработает до чего "до этого"? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2003, 11:36 |
|
При закрытии форма не выгружается из памяти
|
|||
---|---|---|---|
#18+
до чего "до этого"? до Set form2=nothing ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2003, 16:02 |
|
При закрытии форма не выгружается из памяти
|
|||
---|---|---|---|
#18+
до чего "до этого"? до Set form2=nothing Да? Ну, тогда тебе самому следует последить за этим событием, и "ты откроешь для себя много нового" ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2003, 04:13 |
|
При закрытии форма не выгружается из памяти
|
|||
---|---|---|---|
#18+
DionX: ну в чем проблема!? когда ты обращаешься к форме по ее имени, VB создает (заместо тебя, заметь) объектную переменную и держит ее до тех пор пока ты ему явно не скажешь ее освободить. попробуй вместо "ленивого"(и по-моему кривого) кода Код: plaintext
Код: plaintext 1. 2.
уверяю тебя, описанной тобой ситуации не будет, поскольку объектная переменная и время ее жизни явно определены программистом. И стоит закрыть форму, как класс формы будет выгружен из памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2003, 14:21 |
|
При закрытии форма не выгружается из памяти
|
|||
---|---|---|---|
#18+
2 Hibernate в описанной тобой ситуации полностью согласен. но обратись к началу ентого форума, Chubaka открывал (открывала?) именно методом form2.show. О создании экземпляра класса формы только говорилось как о желаемом. Всё равно, признаю твою победу :-)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2003, 04:37 |
|
При закрытии форма не выгружается из памяти
|
|||
---|---|---|---|
#18+
2DionX: Всё равно, признаю твою победу охотно делюсь ею с тобой - ты дал соврешенно правильный ответ (Set Form2=Nothing) для решения проблемы, просто преподнес его под несколько некорректным соусом :-). ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2003, 15:36 |
|
|
start [/forum/topic.php?fid=60&msg=32306146&tid=2170531]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
70ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 328ms |
total: | 483ms |
0 / 0 |