解决方案:
AS3使用非确定性垃圾回收。这意味着无论何时运行时,未引用的内存都将被释放(通常除非有理由运行,否则不会释放,因为执行起来很昂贵)。这与大多数现代垃圾收集语言(例如Cand Java)使用的方法相同。
要强制执行GC,请尝试:
flash.system.System.gc(); flash.system.System.gc();
代码参考:
private var gcCount:int; private function startGCCycle():void{ gcCount = 0; addEventListener(Event.ENTER_FRAME, doGC); } private function doGC(evt:Event):void{ flash.system.System.gc(); if(++gcCount > 1){ removeEventListener(Event.ENTER_FRAME, doGC); setTimeout(lastGC, 40); } } private function lastGC():void{ flash.system.System.gc(); }
以下是另一种解决方法,而不是创建ByteArray
变量,请尝试此操作。
var byteObject:Object = new Object(); byteObject.byteArray = new ByteArray(); ... //Then when you are finished delete the variable from byteObject delete byteObject.byteArray;
如果" byteArray"是" byteObject"的动态属性,则可以释放为其分配的内存。
" System.totalMemory"为我们提供了"已使用"(未分配)的内存总量。准确的说,应用程序可能仅使用20mb,但是它有5mb可供将来分配。
ByteArray
?我尝试了以下方法:
//First non-working solution byteArray.length = 0; byteArray = new ByteArray(); //Second non-working solution for ( var i:int=0; i < byteArray.length; i++ ) { byteArray[i] = null; }
日期:2020-03-23 10:45:27 来源:oir作者:oir