Страница: 1 | 2 |
Ну типа frmMain=Nothing и все такое. Помню когда-то давно был похожий вопрос, но поиск по форуму что-то не пашет.
Я делаю так: Sub cmdExit_Click() End End Sub И в чем вопрос? - все просто! dim f as form for each f in forms uload f set f=nothing next cresta, должен с тобой не согласиться. Оператор End выгружает из ОЗУ переменные и пр. По крайней мере так написано в двух книгах по VB, в которые я заглянул. А вот Unload всех форм оставит публичные переменные в памяти. Это отрывок из Ликбеза (написал некто Эскин М., насколько я помню) Из формы можно выйти несколькими способами : Первый способ: Me.Visible = False. Он только скрывает форму, но ни в коем случае не выгружает ее. Альтернативой этому свойству может служить метод Hide. Например Me.Hide. Свойство Visible чаще используется для проверки, например: Вот пример распределения памяти при запуске моей самой прожорливой программы: Исходное (до запуска):файл подкачки 131 Мб, доступного ОЗУ 64 Мб Прога запущена: файл подкачки 162 Мб, доступного ОЗУ 22 Мб Выход через Unload: файл подкачки 131 Мб, доступного ОЗУ 61 Мб Выход через End: файл подкачки 147 Мб, доступного ОЗУ 46 Мб Это цифры. Не из книги, а из TaskManager А событие Unload кроме всего прочего придумано ещё и для того, чтобы в нем удалить переменные и объекты из памяти При завершении через Unload (всех форм!), в ряде случаев, Task Manager показывает работающий процесс с именем только что завершенной программы! При переходе на End это исчезало. Системы: WIN98 и XP. Ура. Ни у кого никаких проблем!!! Редкость однако! ) Что за фигня? Unload для всех форм никогда не завершит процесс, их породивший! ExitProcess-то в этом случае не выполняется! Вы свое исследование, cresta, правильно провели? Комп перезагружали после первого замера?
Вопрос: Как правильно заканчивать работу программы
Добавлено: 12.12.03 19:29
Автор вопроса: NightVolk | Web-сайт:
Ответы
Всего ответов: 19
Номер ответа: 1
Автор ответа:
Ворон
ICQ: 178095693
Вопросов: 6
Ответов: 24
Профиль | | #1
Добавлено: 12.12.03 19:56
Номер ответа: 2
Автор ответа:
Виталий51
ICQ: 224290361
Вопросов: 8
Ответов: 50
Web-сайт:
Профиль | | #2
Добавлено: 12.12.03 22:22
Номер ответа: 3
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #3
Добавлено: 12.12.03 23:11
End - не очень хорошо, все объекты созданные прогой в памяти(переменные, массивы,Recordset'ы и т.д.) остаются и безхозные шарахаются по ОЗУ. Если их мало и они маленькие то куда ни шло, а если занимают много места, то лучше избавиться от них. Просто Unload всем формам программы.
Номер ответа: 4
Автор ответа:
Malyav
ICQ: 8440085
Вопросов: 15
Ответов: 117
Web-сайт:
Профиль | | #4
Добавлено: 13.12.03 08:00
Номер ответа: 5
Автор ответа:
Ворон
ICQ: 178095693
Вопросов: 6
Ответов: 24
Профиль | | #5
Добавлено: 13.12.03 10:54
Номер ответа: 6
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #6
Добавлено: 13.12.03 13:29
If frmMain.Visible=False Then ...
Нажатие на крестик в верхнем правом углу абсолютно соответствует варианту - Unload Me
Преимуществами этих способов является то, что перед выгрузкой можно выполнить определенные проверки в событии Form_Unload, и даже отменить выгрузку формы, используя ее параметр Cancel.
Последний вариант - самый грубый. Он подразумевает прерывание программы в месте вывода метода End. Прерывая все действия и закрывая все существующие окна, независимо видимы они или нет, без обработки закрытия форм. Поэтому пользоваться этим способом крайне не рекомендую. <Конец цитаты>
Номер ответа: 7
Автор ответа:
Ворон
ICQ: 178095693
Вопросов: 6
Ответов: 24
Профиль | | #7
Добавлено: 13.12.03 22:05
Номер ответа: 8
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #8
Добавлено: 13.12.03 23:44
Противоречие:Если при Unload Task Manager показывает работающий процесс с именем только что завершенной программы, то доступной памяти будет меньше, чем при End, а на деле наоборот.
Номер ответа: 9
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #9
Добавлено: 14.12.03 15:28
Блин, да я пожизни End пишу, и никаких проблем!
Номер ответа: 10
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #10
Добавлено: 14.12.03 20:33
Да и у меня как-то особых проблем нет. Все довольны, все смеются
Номер ответа: 11
Автор ответа:
Ворон
ICQ: 178095693
Вопросов: 6
Ответов: 24
Профиль | | #11
Добавлено: 15.12.03 02:08
Номер ответа: 12
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #12
Добавлено: 15.12.03 04:17
Номер ответа: 13
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #13
Добавлено: 15.12.03 08:51
> и даже отменить выгрузку формы, используя ее параметр Cancel
Отменить можно только в обработчике события QueryUnload, но ни в коем
случае не Unload (хотя и там, по-моему, тоже можно, но форма будет уже
выгружена и при установке Cancel=True загрузится новый экземпляр
формы).
Номер ответа: 14
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #14
Добавлено: 15.12.03 09:36
Sharp, хотя я в дискуссию не въезжаю..., но возможно мой ответ будет
правльным в этом контексте . После выгрузки главной формы
(прописанной в StartUp object) процесс автоматически завершается.
Номер ответа: 15
Автор ответа:
Pashenko
ICQ: 176176951
Вопросов: 14
Ответов: 655
Профиль | | #15
Добавлено: 15.12.03 09:56
Господа, я что-то не въехал, здесь обсуждают процесс завершения
программы или выгрузку всех её форм?
Насколько я понимаю, это не совсем одно и то же.
Кстати, по поводу:
>>После выгрузки главной формы (прописанной в StartUp object) процесс
автоматически завершается.
Это не правда:
StartUp object - Form1
Private Sub Form_Load()
Form2.Show
End Sub
Private Sub Form_Load()
Unload Form1
End Sub
Смотрим, что получилось...