• 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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    js中常见的异步操作有哪些?
    z-index
    transition和animation的区别?
    JS 中遇到有特殊字符或者空格时会被转译该怎么办?
    url参数中有+、空格、=、%、&、#等特殊符号无法显示怎么办?
    JS如何删除对象中的某一属性?
    splice和slice、map和forEach、 filter()、reduce()的区别
    css呼吸灯效果
    mescroll—移动端精致的下拉刷新和上拉加载js框架(支持Vue)
    血淋淋的教训—将Vue项目打包成app的跨域问题
  • 原文地址:https://www.cnblogs.com/pains/p/1763056.html
Copyright © 2020-2023  润新知