您的位置:首页 > 其它

[AS-Hack]AS3中强制进行垃圾回收的方法

2009-04-30 15:06 309 查看
try{
new LocalConnection().connect("foo");
new LocalConnection().connect("foo");
}catch(error : Error){
}


具体测试:

分别用initNoBitmapDataView()和initBitmapDataView()进行10k个举行元素创建

测试结果:
1.1不使用BitmapData 内存占用 40M

2.1使用BitmapData 依旧内存占用 40M!
原因分析: 虽然_sqrList被设为null,但是原先被_sqrList所引用的1w个sprite数据依旧在内存中存在,虽然AMV2自带垃圾回收机,但是何时进行垃圾回收是不确定的。而要强制执行垃圾回收机,则要用上文提到的hack手段
2.2使用BitmapData + 垃圾回收hack 内存占用 12M

package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.net.LocalConnection;

public class MoonSpirit extends Sprite {
private const SQR_AMOUNT : int = 10000;//方块数量
private var _container_sp : Sprite; //容器sprite
private var _sqrList : Array;//所有方块的引用

public function MoonSpirit() {
init( );
}

private function init( ) : void{
_container_sp = new Sprite( );
addChild(_container_sp);
//initNoBitmapDataView( );
initBitmapDataView( );
}

//初始化 通过通常手段 显示
private function initNoBitmapDataView( ) : void {
layoutTenThousandSqr( );
}

//初始化 通过BitmapData快照 显示
private function initBitmapDataView( ) : void {
layoutTenThousandSqr( );
var myBitmapDataObject : BitmapData = new BitmapData(150, 150, false, 0xFF0000);
var myImage:Bitmap = new Bitmap(myBitmapDataObject);
addChild(myImage);
unLayoutTenThousandSqr( );
_sqrList = null;
doClearance( );
}

private function layoutTenThousandSqr( ) : void {
_sqrList = new Array( );
for(var i : int = 0; i < SQR_AMOUNT; i++){
_sqrList.push(new Sprite());
_sqrList[i].graphics.beginFill(0xff0000);
_sqrList[i].graphics.drawRect(0,0,100,100);
_sqrList[i].graphics.endFill();
_container_sp.addChild(_sqrList[i]);
}
}

//不显示
private function unLayoutTenThousandSqr( ) : void {
for(var i : int = 0; i < SQR_AMOUNT; i++){
_container_sp.removeChild(_sqrList[i]);
delete _sqrList[i];
}
}

//精髓,垃圾回收机强制调用
private function doClearance( ) : void {
trace("clear");
try{
new LocalConnection().connect("foo");
new LocalConnection().connect("foo");
}catch(error : Error){

}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐