Ver Mensaje Individual
  #1  
Antiguo 08-07-2010
Avatar de GerTorresM
GerTorresM GerTorresM is offline
Miembro
 
Registrado: nov 2005
Ubicación: Tunja - Boyacá
Posts: 210
Reputación: 21
GerTorresM Va por buen camino
Cool Liberar y destruir realmente un formulario

Hola a Tod@s

La situación que tengo en el día de hoy es siguiente

estoy probando con una aplicación en Delphi 6 Entreprise con dos formularios, a los dos les he puesto una imagen para que pueda ver realmente la memoria que utiliza al cargar cada uno de ellos.

a partir de un botón desde el primer formulario creo mediante código una instancia de del segundo.

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
Var Form_temporal : TForm2;
begin
 Form_temporal:= TForm2.Create(self);
 try
   Form_temporal.ShowModal;
 Finally
   Form_temporal.Free;
 End;
end;

En el segundo formulario tengo lo siguiente :

Una imagen, un TDatabase, una TTable, TDataSource y un DBGrid, que van a trabajar con una base de datos MSAccess mediante BDE.

bien para ver como esta funcionando las cosas el primer formulario cuando carga ocupa algo así como 23.000 Kb, algo normal si tengo en cuenta que posee una imagen algo pesada; al cargar el segundo formulario se ocupa en total algo así como 44.000 kb, pero si cargo los datos la memoria se sube a 47.500kb.

Cuando se cierra el segundo formulario, las cosas con la memoria pueden variar es decir si no utilice un boton que me carga los datos de la tabla el uso de la memoria me queda nuevamente en en los 23.000 kb que pesa el formulario inicial, pero si utilice los datos de tabla y descargue el formulario la memoria queda en 26.500 Kb.

En ese orden de ideas mi pregunta es ¿Se esta quedando abierta en memoria la conexión? , ¿Por que se queda ocupada más memoria si en teoría se destruyo el objeto?.

bien pensé que algo sucedía el intente hacer lo referente a los datos de la siguiente forma:

Código Delphi [-]
procedure TForm2.FormDestroy(Sender: TObject);
begin
  DBGrid1.Free;
  DataSource1.Free;
  Table1.Close;
  Table1.Free;
  Database1.Connected:= False;
  Database1.Close;
  Database1.Free;
end;

pero las cosas siguen igual, ¿Como puede realmente cerrar el formulario sin perder o dejar por ahí parte del espacio utilizado en memoria por el formulario?

Mil gracias de antemano


gertorresm
Colombia
Responder Con Cita