您的位置:首页 > 其它

AS3 hack形式强制执行垃圾回收

2012-07-19 23:47 357 查看
//核心代码,强制Flash Player调用垃圾回收

public function gc( ) : void {

var lc:LocalConnection = new LocalConnection();

try{

lc.connect("nothing");

lc.connect("nothing");

}catch(error : Error){

lc.close();

lc = null;

}

}

or

try{

new LocalConnection().connect("MoonSpirit");

new LocalConnection().connect("MoonSpirit");

}catch(error : Error){

//say something

}

PS.在做Flash应用开发时,一直有Flash占用大量内存的问题,主要集中在BitmapData(位图)处理方面。我今天在《ActionScript3天地会》的论坛看到这个有关gc回收的变通处理方法。因此收藏一下,以备往后用到。

另外关于为什么用LocalConnection方式的解释是

其实LocalConnection与垃圾回收是没有直接关系的.

这个做法的原理在于垃圾回收的时间尽管不确定,但是,只要程序抛出错误,就会运行一次垃圾回收器.这里使用LocalConnection两次connect同一个连接,第二次将发生运行时错误(#1034,LocalConnection已经连接上).于是就报错了.垃圾回收器自动运行.

至于为什么网上流传的版本都是LocalConnection,我个人觉得,可能是因为这个LocalConnection在AS3的应用中相对比较少出现,而且跟其他代码相比,这个运行时错误不容易与其他代码发生冲突.

本文转自:http://www.klstudio.com/post/192.html (代码稍作修改)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: