解决方案:
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
