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 13-02-2008
aggg63 aggg63 is offline
Miembro
 
Registrado: sep 2005
Posts: 31
Poder: 0
aggg63 Va por buen camino
Liberar memoria de objetos y listas

Hola.

Tengo este algoritmo (resumido) con un par de objetos Datos y Campo, que genera una lista de datos. El problema esta en que no consigo liberar toda la memoria que utilizo cuando finaliza. Es recursivo, los datos del nivel siguiente dependen del anterior y finalizo cuando el nivel es cero. Libero las listas y objetos con FreeAndNil o Free, pero veo en los recursos de Windows que la memoria no se libera. Solo cuando cierro la aplicacion dentro del IDE se libera la memoria. ¿Alguien podria indicarme que hago mal, que me falta para liberar la memoria? Uso Delphi 2005 Personal Edition y no domino mucho los objetos.

Muchisimas gracias.


Código Delphi [-]

type
TDatos = class
private Datos1,Datos2: integer;
public function GenDatos(Datos: integer): boolean;
TCampo = class
public Campo1,Campo2: integer;
procedure GenerarCampo(estado: string)
procedure GenerarListaDatos(ListaDatos: TObjectList);
var
Campo: TCampo;
procedure TCampo.GenerarListaDatos(ListaDatos: TObjectList); var
Datos: TDatos;
i: integer;
begin
for i:=0 to 10 do begin
Datos:=TDatos.Create;
Datos.GenDatos(i);
ListaDatos.Add(Datos);
end;
end; procedure CopiarDatos(Original,Copia: TCampo); begin
Copia.Datos1:=Original.Datos1;
Copia.Datos2:=Original.Datos2;
end; procedure TfrmFormulario.CalculoCampos(nivel: integer); var
CopiaCampo: TCampo;
ListaCampos: TObjectList;
i: integer;
begin
if nivel=0 then exit;
CopiaCampo:=TCampo.Create;
CopiarDatos(Campo,CopiaCampo);
ListaCampos:=TObjectList.Create(TRUE);
Campo.GenerarListaDatos(ListaCampos);
for i:=0 to pred(ListaCampos.Count) do begin
Campo.CambiarDatos(TCampo(ListaCampos[i]));
CalculoCampos(nivel-1);
CopiarDatos(CopiaCampo,Campo)
end;
//ListaCampos.Clear;
//FreeAndNil(CopiaCampo);
//FreeAndNil(ListaCampos);
CopiaCampo.Free;
ListaCampos.Free;
end; procedure TfrmFormulario.btnCalcularNodosClick(Sender: TObject); var
CopiaCampo: TCampo;
ListaDatos: TObjectList;
i: integer;
begin
Campo:=TCampo.Create;
CopiaCampo:=TCampo.Create;
Campo.GenerarDatos(estado);
CopiarDatos(Campo,CopiaCampo);
ListaDatos:=TObjectList.Create(TRUE);
Campo.GenerarListaDatos(ListaDatos);
for i:=0 to pred(ListaDatos.Count) do begin
Campo.CambiarDatos(TCampo(ListaDatos[i]));
CalculoCampos(strtoint(txtNivel.text));
CopiarDatos(CopiaCampo,Campo);
end;
FreeAndNil(CopiaCampo);
FreeAndNil(Campo);
FreeAndNil(ListaCampos);
//ListaDatos.Free;
//CopiaCampo.Free;
//Campo.Free;
end;

Última edición por aggg63 fecha: 13-02-2008 a las 14:42:33.
Responder Con Cita
  #2  
Antiguo 13-02-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
No te fijes en los datos del administrador de tareas.

Podrías usar MemProof para analizar si tu aplicación tiene MemoryLeaks, o si tenes BDS 2006 o superior, podes usar el define del compilador REPORTMEMORYLEAKS del manejador de memoria (FastMM) para que la misma aplicación te reporte si hay problemas con la memoria.

Una vez tu programa ponga disponible la memoria, ya windows decidirá cuando usarla de nuevo.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
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
Olvidar liberar punteros, objetos, etc. walito Varios 3 06-01-2008 01:51:47
Liberar Objetos II OscarG OOP 12 11-10-2005 10:13:55
liberar objetos OscarG OOP 13 06-10-2005 18:49:18
Liberar objetos que se han añadido a un TList neon OOP 3 07-10-2004 18:47:54
Liberar un matriz de objetos soul6301 Varios 8 04-08-2004 09:19:53


La franja horaria es GMT +2. Ahora son las 22:06:55.


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