Comunidad de diseño web y desarrollo en internet online

Problema de consumo de memoria en AS3

Citar            
MensajeEscrito el 05 Ene 2011 06:12 am
Hola!
Quisiera que me ayudaran con un problema que tengo en una aplicación en AS3-Air.
Les explico: cuando desarrollaba mi aplicación en AS3 lei tutoriales acerca de manejar la memoria para que no se convierta en un mounstruo come recursos y blablabla... y entre varios tips que apliqué, también estaba el de poner un "Monitor de memoria", un simple cuadrado en la aplicación con la info de la memoria consumida actualmente, para así saber cuando la aplicación comienza a consumir recursos infinitamente... Lo hicé y gracias a eso (y con la ayuda de varios tips) mejoré bastante el consumo de la aplicación...
El problema surgió hoy cuando al exportar la aplicación (Air) y ejecutarla me marcaba el monitor de memoria (pasado unos 10 mins desde su ejecución) aproximadamente 9mb de memoria utilizada:



La que aumentaba unos 50 kb cada 10 seg aprox, pero luego de unos mins bajaba otra vez (supongo que pasaba el gc o algo asi). Hasta ahí bien, siempre me habia marcado eso el monitor, pero al revisar el administrador de tareas y ver lo que consumía la aplicación me llevo la sorpresa que la memoria consumida era mayor a 200mb:



La que aumentaba a razón de 4 mb cada 10 seg aprox, pero sin bajar cada ciertos mins (como me mostraba el monitor en la aplicación).

Entonces quisiera saber que paso con el monitor D:
Acaso me mintió todo este tiempo? xD
Se lo que debo hacer para que no sea infinito el consumo de memoria, pero porque el monitor me muestra una cosa y el administrador de tareas otra? o soy yo que estoy confundiendo cosas y no tienen relación esos 2 "consumos de memoria" D:?

Ojalá me puedan sacar de esa duda. (:

Además como extra quisiera saber como usar el gc, ya que en la documentación de Adobe dice que "En una aplicación AIR, el método System.gc() sólo se activa si el contenido se ejecuta en ADL (AIR Debug Launcher) o (en el caso de una aplicación instalada) en el entorno limitado de seguridad." y no se a que se refieren con entorno limitado de seguridad ):

Bueno eso seria, gracias de antemano!
Saludos ^^

Por laluh

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 May 2011 07:00 pm
Hasta donde yo se el recolector de basura se encarga de esto , . hay objetos que peudes eliminar de memoria manualmente , como los listeners , los objetos bitMapData y las propiedades dinamicas de un objetos , pero lo demas se encarga el recolecto r de basura , . lo que tienes que hacer es por ejemplo colocar en en null esos objetos , claro que eso no va hacer que imediato elimine la memoria de ese objeto , si no que el recolector de basura lo ara cuando vea que sea neseario , y pasa por toda la palicacion , buscando esos objetos que ya no s que usas.

Por petochis

16 de clabLevel



Genero:Masculino  

opera
Citar            
MensajeEscrito el 17 May 2011 12:11 pm
Revisa los Listeners, si dejas Listeners activados aunque remuevas los objetos estos siguen ejecutandose y los objetos continuan en memoria . asignar NULL a objetos que no usaras mas ayuda a liberar memoria tambien . Y por si te sirve , una vez hice un reloj muy simple y en media hora me colapso la maquina, al revisar el debuger encontre una instancia date que se duplicaba varias veces y la memoria incrementava exponencialmente. Revise el código y encontré una senténcia que llamaba al constructor Date() cada ves que la función se ejecutaba . Tenia miles de objetos y ni me daba cuenta.
Yo uso FlashDevelop tiene un debuger bastante útil.Nunca hice nada para AIR , pero el IDE me lo permite.Revisa la documentación del tuyo . Hay muchos Debuger ,son prácticos porque te permiten un control más detallado de los objetos , acciones, ect. Espero que sea útil mi respuesta. Saludos

Por maximil13

70 de clabLevel



Genero:Masculino  

Programador, estudiante de sistemas.

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.