我想要做的是Load()
XNA使用內容管理器的音效,並自動創建一個實例來控制播放。當聲音不再需要時,我想知道如何正確Unload()
它從內存?正確結束SoundEffectInstance
此外,我想知道是否需要Unload()
。當我撥打Load()
兩次時,第二個電話是否能正確釋放第一個電話的記憶?我猜測C#垃圾回收器會自動處理舊效果和實例,因爲它們被第二次調用覆蓋。它是否正確?
這些都是在我的自定義MySoundEffect
類的參數:
// Has sound effect been loaded?
bool loaded;
// Store our SoundEffect resource
SoundEffect effect;
// Instance of our SoundEffect to control playback
SoundEffectInstance instance;
此方法加載聲音。
public void Load(String location)
{
effect = Content.Load<SoundEffect>(location);
if (effect != null) loaded = true;
else
{
Error.Happened("Loading of sound effect " + location + " failed.");
return;
}
// Create instance
instance = effect.CreateInstance();
}
這時候不再需要聲音叫:
public void Unload()
{
loaded = false;
instance.Dispose();
effect.Dispose();
}
因此,當我覆蓋使用ContentManager加載的資產的所有引用時,它仍然沒有被垃圾收集器處置?這不會完全破壞GC的感覺嗎? –
我想你需要手動卸載他們調用Content.Unload()。 – pinckerman
是否[this](http://stackoverflow.com/questions/19911006/garbage-collector-behaviour/19911036?noredirect=1#19911036)與此相矛盾? –