Criar e destruir formulario

Delphi

17/10/2007

Eu utilizo formularios MDI, para criar o form eu utilizo:

if (FCadastro = nil) then
  Application.CreateForm(TFCadastro,FCadastro);



e no evento onClose do Form criado:
  Action := caFree;
  Release;
  FCadastro := nil;


Em algumas estações estou acessando meu servidor com conexao remota e quando clico para fechar o formulario existe uma demora muito grande, percebi que se eu tirar a linha Action := caFree, o formulario é fechado imediatamente como nas estações que utilizam o programa localmente, qual o impacto se eu tirar de todos os meus formularios a linha Action := caFree ? Ou alguem sabe me dizer porque ela causa essa lentidao ?

Abs


Felipeiw

Felipeiw

Curtidas 0

Respostas

Raserafim

Raserafim

17/10/2007

Action := caFree;

siginifica que vc está tirando o form da memória, ou seja, com esta linha vc está tirando o objeto form e todos os seus componentes da memória.

retirar esta linha significa que o form não precisará ser destruido da memória. isto realmente fará com que o form feche mais rapidamente e abra também mais rapidamente (ao menos apartir da segunda vez).

não é regra usar esta linha de código. em algumas situações é preferível não destruir o form da memória, por exemplo quando é um form em que é constantemente aberto.

já que retirando esta linha de código, ou seja, já que não destruindo o form da memória agiliza bastante o seu programa então retire. mas pode continuar a destruir nos forms que são eventualmente aberto, evitando assim que um form que foi fechado fique ocupando a memória da máquina até que o seu programa seja finalizado.

o incoveniente, talvez, seja que, pelo fato de estar utilizando MDI, ao retirar esta linha o form ao invés de ser fechado passa a ser minimizado.


GOSTEI 0
Dr. Interbase

Dr. Interbase

17/10/2007

Acredito que se está demorando no action:=Cafree. É porque talvez tenha querys abertas. Tente fechar as querys e depois destruir as querys do form antes embora o action cafree destrua tudo.


GOSTEI 0
Nigro

Nigro

17/10/2007

Tente assim:
Form1 := TForm1.Create(Self);// Criação de um form à partir de um ´menu´
Form1.ShowModal;
Form1.Free; // ou FreeAndNil(Form1);


GOSTEI 0
POSTAR