每次都会从文件加载Sound Effect.CreateInstance吗?

时间:2011-06-14 23:35:54

标签: c# audio xna soundeffect soundeffectinstance

这是困扰我的事情。如果我通过SoundEffectInstance创建SoundEffect.CreateInstance()我打算在我完成它时将其丢弃。据我所知,SoundEffect.CreateInstance()不使用ContentManager

它是从文件加载还是在内存中保存副本?从文件加载显然会非常慢: - /

1 个答案:

答案 0 :(得分:3)

这是实施细节。您不确定无关紧要,平台之间可能会有所不同,将来可能会发生变化。

然而,您可以做出有根据的猜测:首先,SoundEffectInstance存在,并且您将声音文件加载到SoundEffect这一事实表明SoundEffect可能负责保持声音在记忆中的影响。 SoundEffect.FromStream和基于缓冲区的SoundEffect构造函数的存在强烈表明SoundEffect 必须具有将声音缓冲区保留在内存中的机制。因此,假设从文件加载SoundEffect时它使用相同的机制是相当安全的。

如果它非常重要,您可以在加载SoundEffect后删除或修改声音文件,然后创建实例来测试它。

与往常一样,如果性能非常重要,您应该衡量

当然,创建SoundEffectInstance会分配资源(音频语音,托管和可能非托管内存)。因此,如果您可以避免这种情况,那么您应该定期创建它 - 例如通过池化和重用实例。当您使用SoundEffect.Play时,SoundEffect会在内部为您管理SoundEffectInstance个对象池。