Foros Club Delphi

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

Mary Carmen G. 22-01-2009 20:23:30

Consumo de memoria!!!
 
Hola a todos!!

Espero me puedan comentar a que se debe, el problema que tengo es que en una aplicacion que estoy realizando se crean muchos componentes en tiempo de ejecucion (Tpanel, Tlabel, TImage), como la aplicacion solo es para mostrar datos e imagenes cada vez que se busca un articulo se liberan los componentes creados, pero en el TaskManager la memoria no disminuye. La liberacion de los componentes la hago con free:

Código:

 
    for i := ScrollBoxAlbumes.ControlCount -1  downto 0 do
        ScrollBoxAlbumes.Controls[i].Free;

La aplicacion va a estar abierta siempre, y me preocupa por que en el taskmanager a dado hasta 300,000 KB.

Cuando libero si disminuye pero no es notorio.

Les agradezco cualquier sugerencia.

coso 22-01-2009 21:41:10

Probaria con el components[] en vez del controls[], a ver que pasa, y repasaria, en el caso que haya algo creado en tiempo de ejecucion, si se libera correctamente.

luisgutierrezb 22-01-2009 21:42:22

y si usas FreeandNil??

white_zombie 22-01-2009 22:09:54

Hola, ¿estas segura que todo lo que creas lo emparentas a ScrollBoxAlbumes con la propiedad parent?

Controlscount te da todos los componentes que tengan como parent ScrollBoxAlbumes y componentscount te da todos los componentes que tengan como owner a ScrollBoxAlbumes.

¿Como has creado los componentes?

Mary Carmen G. 22-01-2009 23:08:40

Consumo de memoria!!!
 
Cuando creo los componentes en su propiedad parent le pongo el ScrollBox, para probar antes de hacer el llamado a free de cada uno mando un mensaje y muestro su nombre, y si recorre todos, por lo que supongo si se estan liberando correctamente.

poyo 23-01-2009 00:19:52

lee lo siguiente porque me parece que te puede ayudar

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

Neftali [Germán.Estévez] 23-01-2009 10:02:55

Cita:

Empezado por Mary Carmen G. (Mensaje 335578)
...se liberan los componentes creados, pero en el TaskManager la memoria no disminuye.

Piensa que aunque tú liberes memoria, Windows automáticamente no refleja eso en el TaskManager. Por lo que yo se, esa memoria queda como "Liberada" y cuando Windows la necesita accede a ella.
Es algo siilar a lo que pasa cuando borras un fichero; Windows realmente no lo borra en ese momento, sino que marca ese espacio como disponible, y más adelante cuando necesita espacio, selecciona cualquiera que esté marcado como diponible.

En ambos casos, es más eficiente no realizar la operación en el momento de liberar/borrar.


La franja horaria es GMT +2. Ahora son las 08:34:26.

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