当前位置: 首页 > news >正文

网站建设中的html/seo如何优化一个网站

网站建设中的html,seo如何优化一个网站,网站开发需要多少钱客服,做公司网站报价[as hack技术]垃圾回收机强制执行 -----------------------------------------------------------------------------------------首先,要感谢校友学长“费gg”的帮助,提供了核心的hack技术的方法。然后鉴于几天前一网友关于画上万个sprite之后内存增大问…

[as hack技术]垃圾回收机强制执行

-----------------------------------------------------------------------------------------
首先,要感谢校友学长“费gg”的帮助,提供了核心的hack技术的方法。

然后鉴于几天前一网友关于画上万个sprite之后内存增大问题,在此一并作一下讨论和解决。
-----------------------------------------------------------------------------------------

概述:AVM2理论上是自带垃圾回收机的,但是具体何时进行垃圾回收,理论上非人为所能控制,而我们若要强制启用垃圾回收机,则需要用一些非正规手段,比如如下会提到的手段。

关键字:垃圾回收

核心hack技术
try{
        new LocalConnection().connect("MoonSpirit");
        new LocalConnection().connect("MoonSpirit");
}catch(error : Error){

}

运行上述代码,可强制执行一次垃圾回收机。
具体测试:

分别用initNoBitmapDataView()和initBitmapDataView()进行10k个举行元素创建


测试结果:
1.1不使用BitmapData   内存占用 40M

2.1使用BitmapData     依旧内存占用  40M!
原因分析: 虽然_sqrList被设为null,但是原先被_sqrList所引用的1w个sprite数据依旧在内存中存在,虽然AMV2自带垃圾回收机,但是何时进行垃圾回收是不确定的。而要强制执行垃圾回收机,则要用上文提到的hack手段
2.2使用BitmapData + 垃圾回收hack    内存占用   12M
复制内容到剪贴板
代码:
package {
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.Sprite;
        import flash.net.LocalConnection;

        public class MoonSpirit extends Sprite {
                private const SQR_AMOUNT                        : int = 10000;    //方块数量       
                private var _container_sp                : Sprite;          //容器sprite
                private var _sqrList                                : Array;           //所有方块的引用
               
                public function MoonSpirit() {
                        init( );                       
                }
               
                private function init( ) : void{
                        _container_sp = new Sprite( );
                        addChild(_container_sp);
                        //initNoBitmapDataView( );
                        initBitmapDataView( );
                }
               
                //初始化 通过通常手段 显示
                private function initNoBitmapDataView( ) : void {
                        layoutTenThousandSqr( );
                }
               
                //初始化 通过BitmapData快照 显示
                private function initBitmapDataView( ) : void {
                        layoutTenThousandSqr( );
                        var myBitmapDataObject : BitmapData = new BitmapData(150, 150, false, 0xFF0000);
                        var myImage:Bitmap = new Bitmap(myBitmapDataObject);
                        addChild(myImage);
                        unLayoutTenThousandSqr( );
                        _sqrList = null;
                        doClearance( );
                }
               
                private function layoutTenThousandSqr( ) : void {
                        _sqrList = new Array( );
                        for(var i : int = 0; i < SQR_AMOUNT; i++){
                                _sqrList.push(new Sprite());
                                _sqrList[i].graphics.beginFill(0xff0000);
                                _sqrList[i].graphics.drawRect(0,0,100,100);
                                _sqrList[i].graphics.endFill();
                                _container_sp.addChild(_sqrList[i]);
                        }
                }
               
                //不显示
                private function unLayoutTenThousandSqr( ) : void {
                        for(var i : int = 0; i < SQR_AMOUNT; i++){
                                _container_sp.removeChild(_sqrList[i]);
                                delete _sqrList[i];
                        }
                }
               
                //精髓,垃圾回收机强制调用
                private function doClearance( ) : void {
                        trace("clear");
                        try{
                                new LocalConnection().connect("foo");
                                new LocalConnection().connect("foo");
                        }catch(error : Error){
                               
                        }                       
                }
        }
}
 
 
发现正文漏加了一个批注

所谓强制执行垃圾回收机,是指通过故意使swf在运行时出错,然后throw出错误,而同时通过catch error来继续运行swf文件。而垃圾回收机则会在swf抛出错误的时候,被强制执行一次,以清除内存中无效的数据占用,减少资源的消耗。
 
我当初也是这么理解的,不过从“费gg”处所学到的,包括自己所测试的,并不是所有的error throw都能触发垃圾回收机,而也只局限于某些特定的error,而上文的例子中的这一error恰为其中的一种error类型。

当然,再说得“虚幻”一些,听说!!改种hack办法,也是一位资深的adobe as3内部开发人员所提供的一种对于现有的AVM2的垃圾回收机制的人为触发的不得已的一种办法,当然,是真是假呢?~呵呵,本人也是能力和眼界有限咯。呵呵
 
在蓝色理想找到相关资料,哈
下面这段是蓝色理想版主做出的解释
复制内容到剪贴板
代码:
我来解释下为什么LocalConnection可以实现垃圾回收.
其实LocalConnection与垃圾回收是没有直接关系的.
这个做法的原理在于垃圾回收的时间尽管不确定,但是,只要程序抛出错误,就会运行一次垃圾回收器.这里使用LocalConnection两次connect同一个连接,第二次将发生运行时错误(#1034,LocalConnection已经连接上).于是就报错了.垃圾回收器自动运行.
至于为什么网上流传的版本都是LocalConnection,我个人觉得,可能是因为这个LocalConnection在AS3的应用中相对比较少出现,而且跟其他代码相比,这个运行时错误不容易与其他代码发生冲突.
http://bbs.blueidea.com/thread-2831639-1-1.html
这个网址就是相关的讨论,希望对大家有帮助,哈哈
 
 
 
转自:http://bbs.actionscript3.cn/viewthread.php?tid=234&extra=page%3D1%26amp%3Bfilter%3Ddigest&page=2
http://www.jmfq.cn/news/5233465.html

相关文章:

  • 岳阳网站建设/百度成都总部
  • 网页设计毕业论文参考文献/网站怎么优化自己免费
  • html网页框架代码实例/北京网站优化排名
  • 动态网站建设试题/目前最新的营销模式有哪些
  • 胶南市场建设服务中心网站/东莞网站seo公司哪家大
  • 微信网站建设模板下载/百度免费打开
  • 网站建设技术公司/沈阳关键词快照优化
  • 个人网站素材下载/东莞网站推广方案
  • 小型网站如何做/深圳网络公司推广
  • 厦门网站建设慕枫/搜索推广渠道
  • 青岛网站搭建公司/沧州网站建设优化公司
  • 柳州市网站制作公司/优化快速排名公司
  • asp网站开发pdf/优化关键词排名优化公司
  • wordpress和卡密平台/人员优化方案
  • 在线app制作平台/seo关键词排名优化费用
  • 个人网站建设方案策划/太原优化排名推广
  • 定制app网站/百度风云榜小说排行榜
  • 我想帮别人做网站有这样的平台吗/关键词的优化方法
  • 不断改进网站建设/兰州模板网站seo价格
  • wordpress 当前主题/seo技术优化服务
  • 如何用java做网站视频/青岛seo排名扣费
  • 网站建设的困难/seo优化专家
  • seo点击软件哪个好用/成都sem优化
  • 网站设计深圳网站建设公司/成都比较靠谱的seo
  • 电商平台网站/营销外包公司
  • 易语言怎么制作网站/视频剪辑培训机构
  • 苏州做网站哪家公司好/优帮云排名自动扣费
  • 东营市公司网站建设价格/网络推广比较经典和常用的方法有
  • 甘肃网站备案/河南省郑州市金水区
  • 网站建设公司的专业度该怎么去看/百度开户怎么开