Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-07-2010
Avatar de GerTorresM
GerTorresM GerTorresM is offline
Miembro
 
Registrado: nov 2005
Ubicación: Tunja - Boyacá
Posts: 210
Poder: 19
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
  #2  
Antiguo 08-07-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por GerTorresM Ver Mensaje
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?.
Hay que decir, que Windos no libera toda la memoria (o mejor dicho, no la marca como libre) cuando tú destruyes objetos. Es decir, cuando tú liberas el formulario, Windows puede no liberar (si no la necesita) esa memoria; Es una forma de ahorrar trabajo, simplemente la "marca" como utilizable.
Si el sistema la necesita, la utilizará, pero mientra no la necesite tal vez te aparezca como "no-liberada". No se si me he explicado...

Cita:
Empezado por GerTorresM Ver Mensaje
bien pensé que algo sucedía el intente hacer lo referente a los datos de la siguiente forma...
Recuerda que los controles que pones en el formulario, no hace falta liberarlos (Free), lo hará el formulario al destruirse.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 08-07-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

No hay nada que agregar a la explicación de Neftali.

Pero para aportar un granito más a quién pueda interesarle, sumo un artículo de Ian Marteens que leí hace un tiempo.

http://www.marteens.com/trick42.htm

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Destruir objetos david.rguez Varios 28 03-03-2007 03:31:59
destruir Aplicacion jubers85 Varios 2 10-02-2006 09:27:40
Como destruir o liberar una forma maguib Varios 1 11-03-2005 19:39:02
Destruir un TIBQuery furniman Varios 1 25-03-2004 12:20:14
No puedo destruir ventana Marina Varios 2 02-12-2003 13:43:58


La franja horaria es GMT +2. Ahora son las 17:14:45.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi