zoukankan      html  css  js  c++  java
  • 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的右上角有一个关闭按钮,用来把自己从舞台移除,我不断的来回点这两个按钮,测试结果显示内存不会一直增加,会保持在一个水平线上波动,有图有真相,下图就是测试时任务管理器中显示的内存占用:

     

     附上demo,下载

    这个demo使用条件:

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

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

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

    作者:Rick Carter
    出处:http://pains.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    使用 libevent 和 libev 提高网络应用性能
    An existing connection was forcibly closed by the remote host
    各种浏览器的兼容css
    vs输出窗口,显示build的时间
    sass
    网站设置404错误页
    List of content management systems
    css footer not displaying at the bottom of the page
    强制刷新css
    sp_executesql invalid object name
  • 原文地址:https://www.cnblogs.com/pains/p/1763056.html
Copyright © 2011-2022 走看看