Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Вниз

Нужно ли уничтожать формы, если они не создаются при старте ?   Найти похожие ветки 

 
Prohodil Mimo ©   (2005-09-22 17:52) [0]

Пример такой:

изначально все формы не созданны, при необходимости открытия форма создаётся, при закрытии делаем ей Destroy. Так вот нужен ли уничтожать форму или пусть себе живёт до конца работы приложения? Память, насколько я понял, всё павно не освободится и форма будет взята от туда при следующем создании.
Если не уничтожаем при закрытии необходимо проверять, а не создана ли она уже.

Каково ваше мнение : убивать или не убивать?


 
Digitman ©   (2005-09-22 17:57) [1]


> изначально все формы не созданны, при необходимости открытия
> форма создаётся, при закрытии делаем ей Destroy


понято и принято к сведению.


> нужен ли уничтожать форму или пусть себе живёт до конца
> работы приложения?


зависит от конкретной прикл.логики.

нет резона держать объект формы в АП процесса, если он вплорть до завершения процесса более явно не понадобится.


 
iZEN ©   (2005-09-22 17:58) [2]

Память больше не ресурс(?)


 
Джо ©   (2005-09-22 18:00) [3]


> Каково ваше мнение : убивать или не убивать?

This Jesus must die (c)

:)


 
Prohodil Mimo ©   (2005-09-22 18:03) [4]

Digitman ©   (22.09.05 17:57) [1]
нет резона держать объект формы в АП процесса, если он вплорть до завершения процесса более явно не понадобится


А вот этого мы не знаем... может ещё 100 раз откроют, а может и ни разу.


 
Desdechado ©   (2005-09-22 18:23) [5]

а если эта форма может быть открыта не единожды одновременно, то как с ней поступать? накапливать, что ли?
имхо, убивать сразу после закрытия, особенно при многоэкземплярности


 
Anatoly Podgoretsky ©   (2005-09-22 18:56) [6]

Убивать из рогатки.


 
Prohodil Mimo ©   (2005-09-22 22:13) [7]

Desdechado ©   (22.09.05 18:23) [5]
а если эта форма может быть открыта не единожды одновременно


об этих отдельный разговор.

ЗЫ. значит выходит что нет ничего плохого, если форма убивается сразу при выходе, даже если после этого она опять может понадобиться, т.к. в основном повторное создание будет практически с той же скоростью как и открытие уже созданной. Так же убитие помогает избежать некоторых не хороших моментов, один из которых в [5].


 
Anatoly Podgoretsky ©   (2005-09-22 22:27) [8]

Ну создай цикл от 1 до 1000000 Creat/Free и посмотри как за скорость, так и за памятью. Зачем гадать?


 
TUser ©   (2005-09-22 22:43) [9]

> Память, насколько я понял, всё павно не освободится и форма будет взята от туда при следующем создании.

Это еще почему?


 
Prohodil Mimo ©   (2005-09-22 23:12) [10]

TUser ©   (22.09.05 22:43) [9]
Это еще почему?


из наблюдений


 
Prohodil Mimo ©   (2005-09-22 23:15) [11]

Anatoly Podgoretsky ©   (22.09.05 22:27) [8]
Ну создай цикл от 1 до 1000000 Creat/Free и посмотри как за скорость


Я ж не игру пишу, чтобы в циклах формы открывать, а для одного открытия разницы практически не видно, кроме первого раза.


 
kaif ©   (2005-09-22 23:28) [12]

У меня всегда все формы (кроме главного окна) создаются рантайм.
Как правило это модальные окна:

with TMyForm.Create(nil) do
try
 if ShowModal = mrOK then
    <делать что-то>;
finally
 Free;
end;

Можно упростить этот код, прописав OnClose Action := caFree.
Тогда это выглядит так:
 if TMyForm.Create(nil).SowModal = mrOK then
    <делать что-то>

Но я обычно делаю все же в блоке try finally end, так как часто после ShowModal нужно бывает обратиться к каким-то свойствам или методам формы до того как делать Free.

MDIChild окна по определению требуют CloseAction := caFree, иначе их не убрать зрительно из дельфийской главной MDI формы.

Так что как ни крути, но как модальные, так и MDIChild окна удобно уничтожать сразу после закрытия. Я уже лет 10 так пишу программы и еще ни разу не сталкивался к какими-либо проблемами, побуждающими окна "хранить до конца"

Возможно в SDI-приложениях, если несколько окон постоянно присутствуют на экране и в одном из них осуществляется навигация, а в другом просмотр чего-либо, то хранение окон до конца работы приложения оправдано. Возможно, что оправдано хранить какие-то окна диалогов типа Find/FindNext. Я иногда так делаю. Эту удобно, если окно должно при повторном отображении повторить состояние большого числа состояний (строка поиска/case insensitive и т.п.). Так что в качестве исключения можно себе позволить такой подход в ряде случаев. Но создавать и хранить до конца работы десяток форм для меня лично кажется чем-то тяжеловесным и неприятным. Мне нравится, когда в dpr-файле кроме создания одного DataModule и одного главного окна больше ничего нет и не планируется, чтобы было.


 
Anatoly Podgoretsky ©   (2005-09-22 23:28) [13]

Так потому и предлагаю такой больщой цикл, что развеять или подтвердить сомнения насчет скорости и памят. Вот ссылаешь на наблюдение и в тоже время говоришь, что не проверял.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.043 c
2-1126858358
Андрей гость
2005-09-16 12:12
2005.10.16
Разбить текстовое поле на части


2-1127214337
I231
2005-09-20 15:05
2005.10.16
beep


2-1127106166
ilya_ae
2005-09-19 09:02
2005.10.16
освобождение памяти


2-1127066871
Quattro
2005-09-18 22:07
2005.10.16
Своя кнопка


14-1127299712
DelphiN!
2005-09-21 14:48
2005.10.16
Алексей Дубовцев "Microsoft .NET в подлиннике" электоронная верс.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский