PDA

Ver la Versión Completa : Consumo de memoria!!!


Mary Carmen G.
22-01-2009, 20:23:30
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:


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
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
...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.