0

这是一直困扰着我的事情。如果我创建了一个SoundEffectInstancevia SoundEffect.CreateInstance(),我打算在我完成它时处理它。据我所知,SoundEffect.CreateInstance()不使用。ContentManager

那么它是从文件加载还是在内存中保留一个副本?从文件加载显然会很慢:-/

4

1 回答 1

3

这是一个实现细节。你不确定,没关系,平台之间可能会有所不同,并且将来可能会改变。

但是,您可以做出有根据的猜测:首先,SoundEffectInstance存在的事实,并且您将声音文件加载到SoundEffect其中表明这SoundEffect可能是负责将声音效果保存在内存中的原因。并且SoundEffect.FromStream基于缓冲区的SoundEffect构造函数的存在有力地表明,SoundEffect 必须有一种机制来在内存中保持一个健全的缓冲区。因此,假设当您SoundEffect从文件加载 a 时,它使用相同的机制是相当安全的。

如果它真的很重要,你可以通过删除或修改声音文件来测试它,在加载之后SoundEffect,然后创建一个实例。

与往常一样,如果性能真的很重要,您应该对其进行衡量

当然,创建 aSoundEffectInstance确实会分配资源(音频、托管和可能未托管的内存)。因此,如果可以避免它,则不应该定期创建它——例如通过池化和重用实例。当您使用SoundEffect.Play, thenSoundEffect在内部SoundEffectInstance为您管理对象池。

于 2011-06-15T02:55:38.133 回答