zoukankan      html  css  js  c++  java
  • [转载]AS3强制内存回收的方法

    注:AVM的GC机制确实有些诡异,不象CLR可以通过GC.Collect()显示调用,中午在天地会闲逛时,发现了下面的这二个方法,转载一下

    原文:http://bbs.9ria.com/viewthread.php?tid=24027&extra=page%3D1%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D12&page=1

    方法1:

    function GC():void{
                    try{
                    (new LocalConnection).connect("foo");
                    (new LocalConnection).connect("foo");}catch(e){
                            trace(System.totalMemory);
                            }
                    }
    

    方法2:

    package {
            /**
             * @author CYPL
             * @date 2009-04-01
             */
            import flash.net.SharedObject;
            import flash.system.System;
            import flash.utils.clearInterval;
            import flash.utils.setInterval;        
    
            public class GCPlus {
                    public static function clear(isTraceTM : Boolean = false) : void {
                            var time : int = 2;
                            var interval : int = setInterval(loop, 50);
                            function loop() : void {
                                    if(!(time--)) {
                                            isTraceTM && trace(System.totalMemory);
                                            clearInterval(interval);
                                            return;
                                    }
                                    SharedObject.getLocal("cypl", "/");
                            }
                    }
            }
    }
    

    测试代码:

    package {
            import flash.display.MovieClip;
            import flash.display.Sprite;
            import flash.events.MouseEvent;
            import flash.system.System;        
    
            /**
             * @author CYPL
             */
            public class GC_Test extends Sprite {
                    private static const NUM : int = 1000;
                    private var num : int;
    
                    public function GC_Test() {
                            init();
                    }
    
                    private function init() : void {
                            num = NUM;
                            stage.addEventListener(MouseEvent.CLICK, clickHandler);
                            while (num--) {
                                    var mc : MovieClip = new MovieClip;
                                    mc.graphics.beginFill(0);
                                    mc.graphics.drawRect(0, 0, 100, 100);
                                    mc.x = Math.random() * 500;
                                    mc.y = Math.random() * 400;
                                    addChild(mc);
                            }
                            
                            trace(System.totalMemory);
                    }
    
                    private function clickHandler(e : MouseEvent) : void {
                            clear();
                    }
    
                    private function clear() : void {
                            while (numChildren) {
                                    removeChildAt(0);
                            }
                            GCPlus.clear(true);
                    }
                    /*function GC():void{//这是我们熟悉的方法
                    try{
                    (new LocalConnection).connect("foo");
                    (new LocalConnection).connect("foo");}catch(e){
                            trace(System.totalMemory);
                            }
                    }*/
            }
    }
    

    通过System.totalMemory的结果可以清楚的看到内存得以释放,window任务管理器也能够看到有变化哦,原理也可能和异常有点关系.

    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    HTML
    JavaScript事件对象
    JavaScript 事件入门
    如何向github上传文件
    crystal
    BUUCTF[强网杯 2019]随便注wp
    BUUCTF[CISCN2019 华东南赛区]Web4 wp
    BUUCTF[NPUCTF2020]ezinclude wp
    Windows下Ant的环境配置
    Java解惑(1)——表达式之谜
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1901177.html
Copyright © 2011-2022 走看看