Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Manejo de memoria (https://www.clubdelphi.com/foros/showthread.php?t=20131)

rastafarey 06-04-2005 19:52:56

Manejo de memoria
 
Sera buena idea sustituir el manejador de memoria de delphi.

O sera qu ele estoy dando mal uso.

Tengo un memo en un forma
y el windows me dice que la aplicacion ocupa 2.123 kb
(de aqui en adelante me refiero a lo que me notifica
windowscomo memoria en uso por la aplicacion
como W:memoria ejm W:2.123 kb)
Código Delphi [-]
 
Procedure Forma1.Limpiar;
Begin
   Memo1.Lines.Clear;
End;

Procedure Forma1.Cargar;
Const
   N= 1000;
Begin
   For I := 1 to N Do 
     Memo1.Lines.Add(Format('Linea-%d', [i]));
End;

//Boton de limpiar
Procedure Forma1.buton1(Sender: tobject);
Begin
   Limpiar;
End;

//Boton de cargar
Procedure Forma1.buton2(Sender: tobject)
Begin
   Gargar;
End;
hago click en el boton de cargar y
w:2.456
una vez mas
w:2.999

y asi susecivamente

poro al hacer click en boton de limpiar
w:2.999

luego vuelvo a cargar
e igual
w:2.999
debo hacer click dos veses mas
que cambie el uso de memoria de la plicacion

Mi pregunta es si windows esta equivocado o
delphi no esta liberando la memoria o como deberia
hacer para liberar la memoria.

jachguate 06-04-2005 20:12:19

Podria tratarse de lo que Ian Marteens ya nos habla en su truco Liberando memoria inactiva.

Hasta luego.

;)

mamcx 06-04-2005 23:44:07

No te preocupes con lo que ves. Empezando porque no es una forma confiable de medir memoria y no estas teniendo en cuenta la administración automatica que hace Delphi con los strings y la clase TStringList y otras cosas (como los caches y precargas de memoria y otras cosas)...

En segundo lugar, los valores que te da el task manager NO son los que supones. Esos NO marcan la VERDADERA memoria sino que incluyen las reservas de memoria que el sistema operativo reserva para la aplicacion (de hecho puede dar MENOS porque no necesariamente muestran los subprocesos u otras cosas). Como dice el articulo de Ian, esa memoria se libera al minimizar la aplicacion. La cosa es que no solo se libera la memoria de inicializacion sino que se resetea la reserva de memoria.

En conclusion?

Ignora el task manager. No sirve para medir confiablemente el uso de memoria. Peor aun en aplicaciones servidoras.

Busca en http://www.sysinternals.com/ verdaderas utilidades al respecto que si son utiles para programadores y administradores de sistemas. Ademas, usar una herramienta como MemProf o AQTime de http://www.automatedqa.com/ es mucha mejor idea.

El administrador de Memoria que incluye Delphi es suficientemente bueno, de hecho muy bueno... sin embargo si se cumple que:

- La aplicacion es de tipo servidora
- Multiples hilos
- Multiples procesadores
- Periodos prolongados de uso o grandes cantidades de memoria

Entonces en ese caso SI justifica buscar un administrador sustituto, debido a que con el administrador de memoria de Delphi la memoria se fragmenta con el tiempo (en estos escenarios de uso) . En base a lo que he leido, este es un administrador de memoria MUY bueno: http://www.nexusdb.com/showpage.asp?Id=98, aunque hay otros disponibles y cualquiera es una mejora sobre el de Delphi para los casos que te puse.

rastafarey 07-04-2005 21:16:18

Bien
 
Gracias por su respuesta.

Lo que me han dicho me termina de aclarar las dudas.

NexusDb Ya lo he probado.

Pero se les agradece todo lo dicho.


La franja horaria es GMT +2. Ahora son las 19:10:39.

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