[AS-Hack]AS3中强制进行垃圾回收的方法
2009-04-30 15:06
309 查看
try{ new LocalConnection().connect("foo"); new LocalConnection().connect("foo"); }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){ } } } }
相关文章推荐
- [AS-Hack]AS3中强制进行垃圾回收的方法
- AS3 hack形式强制执行垃圾回收
- 强制垃圾回收:(即著名的hack方式)
- 类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们的问题的解决方法
- 类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们的问题的解决方法 续集
- as3中强制垃圾回收
- as3 强制垃圾回收
- AS3强制内存回收方法之二
- zz[as3 hack技术]垃圾回收机强制执行
- .NET强制进行即时垃圾回收
- 《对“XXX::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们》的问题的解决方法
- 转载:《AS3 Expert》- Flash Player的垃圾内存回收机制:能否强制回收?
- [转载]AS3强制内存回收的方法
- AS3 强制垃圾回收
- AS3的垃圾回收
- 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
- 编写高质量代码改善C#程序的157个建议[正确操作字符串、使用默认转型方法、却别对待强制转换与as和is]
- java如何进行内存自动释放,垃圾回收的?
- AS3垃圾回收整理
- AS3的垃圾回收机制-不会回收的4种情况