【发布时间】:2012-10-19 07:08:59
【问题描述】:
看起来只是简单地新建一个 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
空后 3604480
即使 gc 运行一千次后,最后一个值仍然存在。
所以,无论是否播放声道,它看起来都像声音对象 无法从内存中删除。
请说我错了,并告诉我为什么。 提前致谢。
【问题讨论】:
标签: actionscript-3 memory-management memory-leaks garbage-collection audio