actionscript-3 - tutorial - actionscript ventajas y desventajas
Fugas de memoria AS3 (1)
He estado trabajando en una biblioteca y he tenido un problema con la memoria de la aplicación.
loadNewFiles
una clase llamada FileManager que permite al usuario llamar a una función llamada loadNewFiles
: esta función abre un cuadro de diálogo de selección de múltiples archivos y almacena cada FileReferenceList en un vector. Puedo llamar a la función removeList
en cualquier momento y eliminar esa lista y borrar cualquier memoria y oyentes asignados a esa lista, así que todo está bien allí.
Creé otra clase llamada UploadManager , que toma una matriz de objetos FileReference y los sube a una URL a través de la función uploadFiles
. La pérdida de memoria parece estar aquí. Cuando llamas a esta función, agrega los detectores de eventos apropiados y llama a la función de carga. Si la carga falla o la carga finaliza, elimina los oyentes y borra el vector que estaba esperando.
después de que el administrador de carga termine de cargar los archivos, llamo a la función removeFiles
en FileManager (que, recuerda, funcionó perfectamente antes) y ... No pasa nada. Los archivos se eliminan de ambos vectores, los oyentes se eliminan de ambos archivos, pero la memoria permanece asignada. Obviamente, esto tiene el potencial de causar problemas a lo largo del camino, ya que no hay límite para la cantidad de archivos, cargas, etc. disponibles en la biblioteca.
Suena como en su ejemplo que UploadManager aún tiene una referencia a los archivos, ya sea desde el vector pasado a uploadFiles, o algún otro objeto en el juego todavía tiene una referencia.
También tenga en cuenta que System.gc () solo funciona en la versión de depuración del reproductor flash.
Por lo tanto, no puede depender de una elección de diseño arquitectónico. Funciona para probar unidades con operaciones intensivas de memoria cuando necesita ver el consumo de memoria de ActionScript "a pedido".
En un producto de producción, la máquina virtual ActionScript es muy activa en la detección de cuándo y dónde recoger basura. La mayoría diría que sucede justo cuando usted no lo desea.
Intente crear un perfil de la aplicación y observe las "instancias acumulativas" frente a las "instancias", así como la "memoria acumulativa" frente a la "memoria" de los objetos en cuestión (es decir, FileReference).
Puede forzar la recolección de elementos no utilizados durante el tiempo de ejecución en la Vista de perfil para tener una idea realista de cuánta memoria realmente se libera cuando se lleva a cabo la recolección de elementos no utilizados en la versión de lanzamiento.