Форум: "Потрепаться";
Текущий архив: 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