Форум: "Начинающим";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];
ВнизПочему может долго грузится программа? Найти похожие ветки
← →
delphino (2007-07-03 11:19) [0]Раньше программа быстро загружалась, а сейчас очень медленно. Подозреваю, что это из-за того, что много форм приходится создавать сразу после активации первой формы.
Application.Initialize;
Application.CreateForm(TDataModule2, DataModule2);
vhodForm:=TvhodForm.Create(nil);
if vhodForm.ShowModal=1 then
begin
Application.CreateForm(Tmain, main);
Application.CreateForm(Tclient, client);
Application.CreateForm(TsysfindForm, sysfindForm);
Application.CreateForm(TfiltsiForm, filtsiForm);
Application.CreateForm(TfiltstatForm, filtstatForm);
Application.CreateForm(TfiltrukForm, filtrukForm);
Application.CreateForm(TfiltrivForm, filtrivForm);
Application.CreateForm(TfiltsysForm, filtsysForm);
Application.CreateForm(TfiltcatForm, filtcatForm);
Application.CreateForm(Tlistsi1Form, listsi1Form);
Application.CreateForm(TdobdataForm, dobdataForm);
Application.CreateForm(TsrokdogForm, srokdogForm);
Application.CreateForm(TdangForm, dangForm);
Application.CreateForm(TNewrukovForm, NewrukovForm);
Application.CreateForm(TChsysForm, ChsysForm);
Application.CreateForm(TNewdataForm, NewdataForm);
Application.CreateForm(TAboutForm, AboutForm);
Application.CreateForm(TpersysForm, persysForm);
Application.CreateForm(TNewsiForm, NewsiForm);
Application.CreateForm(Tmanager, manager);
Application.CreateForm(Tpodschet, podschet);
Application.CreateForm(Tsiform, siform);
Application.CreateForm(Tsysform, sysform);
Application.CreateForm(Thisdogform, hisdogform);
Application.CreateForm(Teventform, eventform);
Application.CreateForm(Trivalform, rivalform);
Application.CreateForm(TNewsysForm, NewsysForm);
Application.CreateForm(TNewdogForm, NewdogForm);
Application.CreateForm(TTekdogForm, TekdogForm);
Application.CreateForm(TNewatackForm, NewatackForm);
Application.CreateForm(TNewevent, Newevent);
Application.CreateForm(TotForm, otForm);
Application.CreateForm(TpsForm, psForm);
Application.CreateForm(TChdogForm, ChdogForm);
Application.CreateForm(TChevForm, ChevForm);
Application.Run;
end;
Как этого избежать?
← →
ЮЮ © (2007-07-03 11:25) [1]> Раньше программа быстро загружалась, а сейчас очень медленно
Application.CreateForm(TDataModule2, DataModule2);
Раньше в таблицах было мало данных, а теперь полно, а НД открыты в дизайне
Да и формы убрать из списка автооткрываемых (или просто тупо вырезать из dpr
Application.CreateForm(Tclient, client);
Application.CreateForm(TsysfindForm, sysfindForm);
...
Application.CreateForm(TChevForm, ChevForm);)
и вставить строки создания при первой попытке использования форм
← →
Игорь Шевченко © (2007-07-03 11:26) [2]
> Раньше программа быстро загружалась, а сейчас очень медленно
Луна ушла из созвездия Весов ?
← →
DrPass © (2007-07-03 11:54) [3]
> Как этого избежать?
Хм... а не создавать все эти формы сразу пробовал? Чесслово, должно помочь
← →
ЮЮ © (2007-07-03 12:19) [4]И все-таки первым делом, Настя, позакрвывай в дизайне все TTable, коих ещё полтора месяца назад бвло 17 и открывай их как-нибудь постепенно, коль не отказалась от них совсем, как советовали :)
← →
delphino (2007-07-04 02:37) [5]
> коль не отказалась от них совсем, как советовали :)
Ну не смогла отказаться, втянулась.:) Просто когда я только начала изучать БД в DELPHI везде было написано в основном про BDE. Уже несколько раз пожалела о своем выборе, ну все когда проходят период "чайников".
> Application.CreateForm(TDataModule2, DataModule2);
> Раньше в таблицах было мало данных, а теперь полно, а НД
> открыты в дизайне
Так DataModule образуется до открытия формы vhodForm, а она загружается быстро.
> а не создавать все эти формы сразу пробовал?
вот про это я и спрашиваю...можно ли эти формы в главной создавать, например?
← →
Германн © (2007-07-04 02:40) [6]
> вот про это я и спрашиваю...можно ли эти формы в главной
> создавать, например?
Можно и нужно создавать их там и тогда, где и когда нужно.
← →
{RASkov} © (2007-07-04 02:52) [7]> [5] delphino (04.07.07 02:37)
> вот про это я и спрашиваю...можно ли эти формы в главной
> создавать, например?
>.....
Application.CreateForm(TAboutForm, AboutForm);
Application.CreateForm(TpersysForm, persysForm);
.....
Не необходимости создавать все формы сразу при старте программы... Т.е, например форму "О программе", может быть за все время работы программы ее ниразу и не откроют. А ее создание при старте отнимает время... Нужно как можно больше выкинуть форм из Autocreate в опциях проекта... А в программе создавать их по мере надобности, например:procedure TForm.MenuAboutClick(Sender: TObject);
begin
with TAboutForm.Create(nil) do
try
ShowModal;
finally
Free;
end;
end;
← →
Kostafey © (2007-07-04 03:02) [8]Читая ветку заинтересовался.
Открываю исходник одного довольно большого проекта.
Вижу, что в dpr - файле 2/3 строк Application.CreateForm
закомментированы.
Похоже, на практике это часто применяют.
Даже несмотря на это время загрузки приложения составляет
~5 сек (P4 Core Duo, RAM 1024).
← →
{RASkov} © (2007-07-04 03:20) [9]> [8] Kostafey © (04.07.07 03:02)
Application.Run; - вот эта строка собственно и говорит, что процесс загрузки достигнут и началась обработка сообщений виндовс...
А до нее выполняется создание форм, соответственно выполнение всех OnCreate.... и соответственно, "тянется" время загрузки программы...
> Даже несмотря на это время загрузки приложения составляет
Можно сотню форм создать и будет быстро, а может и создание одной формы прилично тормозить "процесс запуска" программы....
> delphino
Так же если в дизайнере присутствуют "активные" ДатаСеты, то при старте программы они также открываются и это тоже может занимать время... Вообщем много от чего зависит время загрузки, но если поубирать все "не нужное" из автокреате, то можно значительно уменьшить время на "пуск" программы...
К "Не нужному" можно отнести все, что не отображается сразу после старта программы... так же в дизайнере все ДатаСеты, которые тоже не нужны сразу после старта, можно сделать Активе=Фолс.....
← →
delphino (2007-07-04 04:30) [10]DatasetЫ закрыла. Вот только не пойму в какой обработчик событий формы можно поместить создание других форм, пробовала перед прорисовкой в OnShow, вроде работает, правильно ли это? И еще вопрос перед закрытием приложения обязательно использовать процедуру Free для освобождения всех форм?
← →
{RASkov} © (2007-07-04 05:11) [11]> Вот только не пойму в какой обработчик событий формы можно
> поместить создание других форм
В любой подходящий для создаваемой формы См. пример в [7] для окна "О программе", которое создается, показывается и удаляется в обработчике ОнКлик элемента меню.... Незачем их(окна) все разом создавать....
> И еще вопрос перед закрытием приложения обязательно использовать
> процедуру Free для освобождения всех форм?
После закрытия приложения все равно всё будет уничтожено :)
← →
Игорь Шевченко © (2007-07-04 11:06) [12]
> Просто когда я только начала изучать БД в DELPHI везде было
> написано в основном про BDE. Уже несколько раз пожалела
> о своем выборе
BDE вполне хорош, про него не зря пишут. Жалеть совсем нечего.
У меня в проектах стоит от 20 до 50 вызовов Application.CreateForm, правда создаются не формы, а датамодули. Все запускается пулей. Я опять что-то делаю не так ?
← →
DrPass © (2007-07-04 11:34) [13]
> Вот только не пойму в какой обработчик событий формы можно
> поместить создание других форм, пробовала перед прорисовкой
> в OnShow, вроде работает, правильно ли это?
Не совсем так. Смысл не в том, что создание всех форм надо забабахать где-нибудь в другом месте, а в том, чтобы не создавать их все сразу. Т.е. формы должны создаваться только тогда, когда они действительно нужны. Например, окошко About создавай при выборе пункта "О программе" в меню. И убивать после закрытия.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.046 c