这是一直困扰着我的事情。如果我创建了一个SoundEffectInstance
via SoundEffect.CreateInstance()
,我打算在我完成它时处理它。据我所知,SoundEffect.CreateInstance()
不使用。ContentManager
那么它是从文件加载还是在内存中保留一个副本?从文件加载显然会很慢:-/
这是一直困扰着我的事情。如果我创建了一个SoundEffectInstance
via SoundEffect.CreateInstance()
,我打算在我完成它时处理它。据我所知,SoundEffect.CreateInstance()
不使用。ContentManager
那么它是从文件加载还是在内存中保留一个副本?从文件加载显然会很慢:-/
这是一个实现细节。你不确定,没关系,平台之间可能会有所不同,并且将来可能会改变。
但是,您可以做出有根据的猜测:首先,SoundEffectInstance
存在的事实,并且您将声音文件加载到SoundEffect
其中表明这SoundEffect
可能是负责将声音效果保存在内存中的原因。并且SoundEffect.FromStream
基于缓冲区的SoundEffect
构造函数的存在有力地表明,SoundEffect
必须有一种机制来在内存中保持一个健全的缓冲区。因此,假设当您SoundEffect
从文件加载 a 时,它使用相同的机制是相当安全的。
如果它真的很重要,你可以通过删除或修改声音文件来测试它,在加载之后SoundEffect
,然后创建一个实例。
与往常一样,如果性能真的很重要,您应该对其进行衡量。
当然,创建 aSoundEffectInstance
确实会分配资源(音频、托管和可能未托管的内存)。因此,如果可以避免它,则不应该定期创建它——例如通过池化和重用实例。当您使用SoundEffect.Play
, thenSoundEffect
在内部SoundEffectInstance
为您管理对象池。