Flash AS3 垃圾回收机强制执行(强烈推荐)
发布时间:2020-12-15 06:43:17 所属栏目:百科 来源:网络整理
导读:这是本人强烈推荐的释放内存方法! 具体测试: 分别用initNoBitmapDataView()和initBitmapDataView()进行10k个举行元素创建 测试结果: 1.1不使用BitmapData? ?内存占用 40M 2.1使用BitmapData? ???依旧内存占用?? 40M! 原因分析: 虽然_sqrList被设为null
这是本人强烈推荐的释放内存方法! 具体测试: 分别用initNoBitmapDataView()和initBitmapDataView()进行10k个举行元素创建 测试结果: 1.1不使用BitmapData? ?内存占用 40M2.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,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) { } } } } 下面给大家讲讲垃圾回收hack的核心原理,其实这并不是什么技术含量很高的做法,只不过这样做能变向地帮我们实现垃圾回收而已! 所谓的强制执行垃圾回收机,是指通过故意使swf在运行时出错,然后throw出错误,而同时通过catch error来继续运行swf文件。而垃圾回收机则会在swf抛出错误的时候,被强制执行一次,以清除内存中无效的数据占用,减少资源的消耗。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |