Показать сообщение отдельно
Старый 03.08.2012, 18:54
zuxul вне форума Посмотреть профиль Отправить личное сообщение для zuxul Найти все сообщения от zuxul
  № 4  
Ответить с цитированием
zuxul

Регистрация: Dec 2009
Адрес: 59°13′N, 39°54′E
Сообщений: 445
Записей в блоге: 1
Попробуйте проверять количество памяти через несколько "фреймов". Кто его знает, как устроен сборщик мусора, может он делает это поэтапно...
Вот тут, нужно покликать по черному квадрату, чтобы запустить gc.
Если закомментировать disposeXML, и присвоение null, памяти больше занимает.
Код AS3:
package {
  import flash.display.Sprite;
  import flash.events.Event;
  import flash.events.MouseEvent;
  import flash.events.TimerEvent;
  import flash.net.URLLoader;
  import flash.net.URLRequest;
  import flash.system.System;
  import flash.utils.Timer;
 
  /**
  * @author zu
  */
  public class Main extends Sprite {
 
    public function Main():void {
      if (stage) init();
      else addEventListener(Event.ADDED_TO_STAGE, init);
    }
 
	private var data:XML;
 
    private function init(e:Event = null):void {
	  var loader:URLLoader = new URLLoader();
	  loader.addEventListener(Event.COMPLETE, loadComplete);
	  loader.load(new URLRequest('test.xml'));
 
	  var sprite:Sprite = new Sprite();
	  sprite.graphics.beginFill(0);
	  sprite.graphics.drawRect(0, 0, 200, 200);
	  sprite.graphics.endFill();
	  addChild(sprite);
	  sprite.addEventListener(MouseEvent.CLICK, testMemoryListener);
    }
 
	private function testMemoryListener(e:Event):void {
		System.gc();
		trace(System.totalMemory);
		if (data) {
			System.disposeXML(data);
			data = null;
		}
	}
 
	private function loadComplete(e:Event):void {
 
		data = new XML(URLLoader(e.currentTarget).data);
		e.currentTarget.removeEventListener(e.type, arguments.callee);
	}    
  }
}