Control de Objetos en Memoria
En este proyecto cuento con una lista que me va mostrando constantemente los objetos que hay en memoria. Si el objeto es borrado, desaparecerá automáticamente de la lista. Y ademas, en el primer item, me indica la memoria utilizada. En un juego, es muy comun armar una clase Game y crear un objeto de esa clase. Y a la hora de reiniciar, o volver a jugar borrar ese objeto y crear uno nuevo. Muchas veces, quedan MovieClips, y objetos almacenados en memoria, que no fueron bien borrados. Por esta razón, este control de memoria es muy importante.
Descargar Archivos del Tutorial
Main.as
Descargar Archivos del Tutorial
Main.as
package { import classes.RAMController; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; /** * ... * @author Lucas Moyano */ public class Main extends Sprite { public var objectA:MovieClip; public var objectB:MovieClip; public function Main() { addChild(RAMController.ins()); RAMController.ins().add(objectA, "ObjectA"); RAMController.ins().add(objectB, "ObjectB"); objectA.addChild(objectB); objectA.removeChild(objectB); objectB = null; removeChild(objectA); objectA = null; } } }RAMController.as
package classes { import fl.controls.List; import flash.display.Sprite; import flash.events.Event; import flash.events.TimerEvent; import flash.system.System; import flash.utils.Dictionary; import flash.utils.Timer; /** * ... * @author Lucas Moyano */ public class RAMController extends Sprite { private static var instance:RAMController; private var objects :Dictionary; private var list :List; private var timer :Timer; public function RAMController() { objects = new Dictionary(true); list = new List(); timer = new Timer(1000); addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); } private function onAddedToStage(e:Event):void { removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage); show(); } public static function ins():RAMController { if (!instance) instance = new RAMController(); return instance; } public function add(object:*, reference:String):void { objects[object] = reference; update(); } public function update():void { var object:*; var reference:String; list.removeAll(); list.addItem( { label: Number(System.totalMemory / 1024 / 1024).toFixed( 2 ) + "Kb" } ); for (object in objects) { reference = objects[object]; list.addItem( { label:reference } ); } System.gc(); } public function show():void { timer.addEventListener(TimerEvent.TIMER, onTickTimer); addChild(list); timer.start(); } public function hide():void { timer.removeEventListener(TimerEvent.TIMER, onTickTimer); removeChild(list); timer.reset(); } private function onTickTimer(e:TimerEvent):void { update(); } } }
Comentarios
Publicar un comentario