Давайте поговорим в этой статье о том, сколько памяти занимает наша программа, приложение, написанное на Delphi. Да можно сказать не много, а если Ваша программа, очень часто делает запросы куда-то, в фоновом режиме что-то выполняет, то тут начинаются уже проблемы, с которыми многие также сталкивались уже. Так вот, для начала можно также уменьшить объем занимаемой памяти Вашей программы, написанной на Delphi, хоть не на много, но все же, а если и дальше оптимизировать, то довольно приличный объем памяти мы сэкономим, и увеличим работу нашего приложения. Давайте предположим, что в Вашем приложении на Delphi около 5 форм. Так вот думаю многие знают, что Delphi их создает все 5 форм сразу, после запуска Вашего приложения, в независимости от того, вызвали Вы форму или нет, они создались и «висят» в памяти, так сказать ждут пока Вы вызовите их с помощью процедур Show или ShowModal. Вот и где Ваша память деётся, хоть и не много, но всеже, а Вы подумайте, если в Вашем приложении не 5 форм, а 25, да и еще забыли уничтожить какой-нибудь поток, переменную и так далее, то тут возникают гораздо больше неприятностей. Давайте решим эту проблему раз и навсегда. А будем мы ее решать очень просто, создавать формы тогда когда нам нужно их вызвать, а при закрытии просто-напросто удалять их из памяти компьютера. Давайте в нашем проекте Delphi нажмем на клавишу F7 и посмотрим
как видите сначала инициализируется наше приложение, а затем создаются все наши формы (все формы нашего приложения). Давайте оставим только создание нашей главной формы, а остальные формы (их создание) просто закомментируем.
А по мере необходимости вызова формы, мы ее будем сразу же и создавать, а по закрытию уничтожать, чтобы не «висела» в памяти компьютера. Например давайте вызовем форму 2, на кнопку события onClick напишем
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.CreateForm(TForm2,Form2);
Form2.Show;
end;
А на событие формы — Form2 - OnClose
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form2.Free;
Form2:=nil;
end;