Ну так еще 2/3 есть
Добавлено через 7 минут

Код AS3:
import flash.net.LocalConnection;
function fill ():void {
trace ("fill");
trace ("1: " + System.totalMemory);
var sprite:Sprite;
for (var i:int = 0; i < 20000; i++) {
sprite = new Sprite();
sprite.graphics.beginFill (0xFF0000);
sprite.graphics.drawRect (0, 0, 500, 500);
sprite.graphics.endFill ();
addChild (sprite);
}
trace ("2: " + System.totalMemory);
}
function clear ():void {
trace ("clear");
trace ("1: " + System.totalMemory);
var i:int = numChildren;
var sprite:Sprite;
while (i--) {
sprite = getChildAt(i) as Sprite;
sprite.graphics.clear ();
removeChild (sprite);
sprite = null;
}
trace ("2: " + System.totalMemory);
try {
//(new LocalConnection).connect ('gc');
//(new LocalConnection).connect ('gc');
} catch (e:*) {
}
//trace ("3: " + System.totalMemory);
}
stage.addEventListener (MouseEvent.MOUSE_DOWN, onDown);
var flag:Boolean = false;
function onDown (event:MouseEvent) {
if (flag) {
clear ();
} else {
fill ();
}
flag = !flag;
trace ();
}
Результат двух пар кликов
Цитата:
fill
1: 2179072
2: 62316544
clear
1: 67145728
2: 20455424
fill
1: 20447232
2: 62472192
clear
1: 67301376
2: 21082112
|
Память очищается, но не до начального уровня.
Раскомментарем три строки, где происходит насильный вызов GC
Цитата:
fill
1: 2183168
2: 62271488
clear
1: 67100672
2: 20459520
3: 3080192
fill
1: 3072000
2: 62345216
clear
1: 67174400
2: 21745664
3: 3092480
|
После вызова GC память отчищается фактически до того состояния как и было.