解决方案:

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可供将来分配。

如何使用ActionScript 3强制从内存中卸载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