`

AS3中内存清理的若干解决方法

    博客分类:
  • AS3
阅读更多

书接上文,上文是很早的一篇文章了!不知道大家还记不记得!标题叫做“AS3中的内存泄露与垃圾回收”。在上一篇文章中,我们详细讨论了AS3的垃圾回收机制!令人沮丧的是,垃圾回收机不是很勤快!很多时候都会拖我们的后退!难道就这么心甘情愿的放任它不管吗!当然不行!我们有对策来解决这个问题。听我慢慢道来!

垃圾回收机制,一共有两种方法:“引用计数法”和“标识清除法”。对与这两种运行机制,我个人来说比较喜欢后一种。因为它简单明了,不会出现任何问题!但是,它会消耗很多CPU,所以就出现了垃圾回收机不定时运行的情况。那么处理方法很简单,我们只需要在需要的时候手动的启动一下垃圾回收机就可以了!那么怎么启动呢?这里就要提flash player的两个版本9.0和10.0.它们的处理方法略有不同!

首先说flash player9.0,在进行内存清理之前,你一定要保证你想清理的内存都不存在引用了!否则的话,下面就白费了!然后我们可以让fp发生一次运行时错误!为什么要这样呢?因为只要fp抛出运行时错误,那么fp就会执行一次垃圾回收机了!好了!知道了这个原理,就好办了!怎么弄呢?网上这段代码已经很多了!我再复制一次吧!

try{
new LocalConnection().connect(”GC”);
new LocalConnection().connect(”GC”);
}catch(error : Error){

}

这样就可以抛出一次运行时错误!垃圾回收机就执行了!达到我们的目的了!

但是,注意!这并非最好的做法。在你的正式项目中千万不要出现这样的语句!它会拖累你的程序的!虽然是一种解决方法,但严重不推荐在正式程序中使用!

下面来说说flash player10.0的做法!貌似ADOBE公司已经对这个问题产生了足够的重视。在fp10中我们已经有了一个非常非常专业的办法!看下面的语句你就明白了!

System.gc();

看到这个语句你会想到什么呢?兴奋吗?在FP10中有了一个专门的静态方法来强制执行垃圾回收进程!这个总比fp9的处理方法好吧!但是它也不是万能的!该方法只在fp10 debug版本和AIR debug版本AIR Debug Launcher (ADL) 中有效,同时在使用之前你也要确保要回收的内存已经不存在任何引用了!否则,你也是白费力气!经过测试,这东西确实令人兴奋!内存回收速度很好!

现在,大部分网民都安装了fp10的网页插件,所以不用担心版本问题,为了确保安全起见,你最好在你的程序初始化的时候检测一下用户的fp版本,如果用户是9的版本,直接让程序连接到adobe flash player的下载页面即可!

关于触发垃圾回收机就先说这么多吧!后面我们再讨论,在程序中,使用一些技巧,方便的管理我们的所有引用!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics