Доброго время суток.
На ранних этапах обнаружил утечку, при вызове метода show() в представленном ниже классе убегает примерно 3Kb (за каждый повторяющий вызов функции методом levelup и leveldown), это видно с диспетчера задач. Помогите с оптимизацией, или посмотрите что может так.

Код AS3:
package src {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.Loader;
import flash.net.URLRequest;
import gs.TweenLite;
import gs.easing.*
import flash.filters.BlurFilter;
public class photoTree extends Sprite {
public var me:Boolean = false;
public var language:Object;
private var tree:Array;
private var sector:Array = new Array();
private var back:Array = new Array();
private var turn:Array = new Array();
private var smallSize:Number = 105;
private var bigSize:Number = 200;
public function photoTree() {
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE,init);
}
private function init(e:Event=null):void
{
removeEventListener(Event.ADDED_TO_STAGE,init);
if (tree)
{
back.push("tree");
sector = tree;
x = 100;
y = 90;
_back.visible = false;
_home.visible = false;
_back.addEventListener(MouseEvent.MOUSE_UP,levelup);
_home.addEventListener(MouseEvent.MOUSE_UP,levelup);
var blur = new BlurFilter(2, 2, 2);
_lines.filters = [blur];
if (me)
{
_favorites.visible = false;
_like.visible = false;
_gift.visible = false;
}
for ( var i=0; i<=5; i++)
{
this['cast'+i]._edit.visible = me;
this['cast'+i]._edit._text.text = language.edit;
this['cast'+i]._over.addEventListener(MouseEvent.ROLL_OVER,showAlert);
this['cast'+i]._over.addEventListener(MouseEvent.ROLL_OUT,hideAlert);
this['cast'+i]._over.addEventListener(MouseEvent.MOUSE_UP,leveldown);
}
show();
}
}
private function levelup(e:MouseEvent):void
{
back.pop();
sector = this[back.join(".")];
show();
}
private function leveldown(e:MouseEvent):void
{
var len:uint = 0;
for (var item in sector[e.target.parent.name]) len++;
if (len>3)
{
back.push(e.target.parent.name);
sector = sector[e.target.parent.name];
show();
}
}
public function reset():void
{
trace('reset photoTree');
for ( var i=0; i<=5; i++)
{
this['cast'+i]._over.removeEventListener(MouseEvent.ROLL_OVER,showAlert);
this['cast'+i]._over.removeEventListener(MouseEvent.ROLL_OUT,hideAlert);
this['cast'+i]._over.removeEventListener(MouseEvent.MOUSE_UP,leveldown);
}
}
private function alphaMover(e:Event):void
{
if ((e.target.astep>0 && e.target.alpha>=1) || (e.target.astep<0 && e.target.alpha<=0))
e.target.removeEventListener(Event.ENTER_FRAME,alphaMover);
else e.target.alpha+=e.target.astep;
}
private function showAlert(e:MouseEvent):void
{
e.target.parent.parent["alert_"+e.target.parent.name].astep = 0.05;
e.target.parent.parent["alert_"+e.target.parent.name].addEventListener(Event.ENTER_FRAME,alphaMover);
}
private function hideAlert(e:MouseEvent):void
{
e.target.parent.parent["alert_"+e.target.parent.name].astep = -0.1;
e.target.parent.parent["alert_"+e.target.parent.name].addEventListener(Event.ENTER_FRAME,alphaMover);
}
public function set content(data:Array):void
{
tree = data;
if (stage) init();
}
private function resize(e:Event):void
{
if(e.target.width>0)
{
e.target.removeEventListener(Event.ENTER_FRAME, resize);
var size = (e.target.parent.parent.name=='photo') ? bigSize : smallSize;
if(e.target.width!=size) e.target.width = e.target.height = size;
if (turn.length!=0) loading();
}
}
private function loading():void
{
var loader:Loader = new Loader();
loader.load(new URLRequest(turn[0]))
this[turn[1]].photo.img.addChild(loader);
this[turn[1]].photo.img.addEventListener(Event.ENTER_FRAME, resize);
turn.shift();
turn.shift();
}
private function show():void
{
_back.visible = (back.length>=2) ? true : false;
_home.visible = (back.length>2) ? true : false;
_head.text = sector.head;
turn[0] = sector.photo;
turn[1] = 'photo';
for ( var i = 0; i < 6; i++ )
{
turn[turn.length] = sector['cast'+i].photo;
turn[turn.length] = 'cast'+i;
this['alert_cast'+i]._head.text = sector['cast'+i].head;
this['alert_cast'+i]._body.text = sector['cast'+i].comment;
this['alert_cast'+i]._help.text = language['help'];
/*var X:Number = this['cast'+i].x;
var Y:Number = this['cast'+i].y;
this['cast'+i].x = 208;
this['cast'+i].y = 94;
this['cast'+i].alpha = 0;
this['cast'+i]['_cast'+i].alpha = 1;
TweenLite.to(this['cast'+i], 1, {x:X, y:Y, ease:Back.easeInOut, alpha:1});*/
}
loading();
}
}
}
Добавлено через 19 минут
Спасибо уже сам нашёл))
нужно было сделать так

Код AS3:
private function loading():void
{
var loader:Loader = new Loader();
loader.load(new URLRequest(turn[0]))
while(this[turn[1]].photo.img.numChildren) this[turn[1]].photo.img.removeChildAt(0);
this[turn[1]].photo.img.addChild(loader);
this[turn[1]].photo.img.addEventListener(Event.ENTER_FRAME, resize);
turn.shift();
turn.shift();
}