as3サウンドオブジェクトを単に新しくしたように見え、その参照をnullに戻すと、SoundChannelの再生に使用されたかどうかに関係なく、メモリリークが発生します。
たとえば、次のテキストコードを使用します。
package
{
import flash.display.*;
import flash.events.*;
import flash.media.*;
import flash.system.*;
import flash.utils.*;
import flash.system.*;
public class Main extends Sprite
{
[Embed(source = "../data/SongScene8.mp3")] protected var SongScene8:Class;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
System.gc();
trace("Before");
trace(System.totalMemory);
trace("_________________")
var sound:Sound = new SongScene8();
System.gc();
trace("After new");
trace(System.totalMemory);
trace("_________________")
sound = null;
System.gc();
trace("After null");
trace(System.totalMemory);
}
}
}
出力は次のとおりです。
3461120より前
新しい3604480の後
null後3604480
gcが1000回実行されても、最後の値は残ります。
そのため、サウンドチャネルが再生されているかどうかに関係なく、サウンドオブジェクトをメモリから削除できないように見えます。
私が間違っていると言って、その理由を教えてください。前もって感謝します。