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

Entradas populares de este blog

Test de Personalidad del Dr. Gary Smalley

HTML - Basic Statements