AS3垃圾回收,在FlashPlayer10.1中实现回收Loader对象

AS3和.NET一样,不需要开发人员关心垃圾回收,Player会在某个不确定的时间对没有被引用的对象进行内存释放,有时候需要垃圾回收器尽早工作,以释放占用的大量内存让程序顺利运行,所以网络上出现了叫做Hack的方法,如下:
function  GC(): void  {
    
try  {
        
new  LocalConnection().connect( " foo " );
        
new  LocalConnection().connect( " foo " );
    } 
catch  (error:Error) {
        
// trace("GC OK!");
    }
}
但这个方法遇到要被回收的是Loader对象时就不太起作用了(注意有个“太”字,在下面的demo里还是起作用的),然后找到在cs4以上版本中的Loader对象有unloadAndStop()方法,这样我在Loader对象从舞台移除时就把它删得“干干净净”,并强制进行垃圾回收(调用上面的GC方法),代码如下:
pictLdr.addEventListener(Event.REMOVED_FROM_STAGE,remove);
function  remove(e:Event): void
{
    pictLdr.removeEventListener(Event.REMOVED_FROM_STAGE,remove);
    pictLdr.unloadAndStop();
    pictLdr.unload();
    pictLdr
= null ;
    GC();
}
下面的demo中放了一个按钮,点击加载并添加一个swf文件到舞台,这个swf的右上角有一个关闭按钮,用来把自己从舞台移除,我不断的来回点这两个按钮,测试结果显示内存不会一直增加,会保持在一个水平线上波动,有图有真相,下图就是测试时任务管理器中显示的内存占用:

 as3GCLoader.JPG

 附上demo,下载

这个demo使用条件:

1.我是用cs5做的,所以请你用cs5打开;

2.播放器需要FlashPlayer10.1 r52,我是用这个测试成功的,试过用FlashPlayer10.0,不行;

3.请在beloaded.fla多放些图片什么的,放个10M左右吧,我上传上来的里面只有一张图(为了减少空间和流量,呵呵),太小了,无法看出内存变化情况。

转载于:https://www.cnblogs.com/pains/archive/2010/06/23/1763056.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值