我想要做的是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)与此相矛盾? –