En este proyecto en Actionscript 3 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, además el primer item me indica la memoria utilizada.
En un juego, es muy común 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. Pero 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.
Archivos del Tutorial
Main.as
Código :
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
Código :
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(); } } }
Por rodolfo el 27 de Mayo de 2012
Por virtualblog1 el 29 de Mayo de 2012