这一直困扰着我。如果我通过SoundEffectInstance
创建一个SoundEffect.CreateInstance()
,则意味着在完成后将其丢弃。据我所知,SoundEffect.CreateInstance()
不使用ContentManager
。
那么它是从文件加载还是在内存中保留副本?从文件加载显然很慢:-/
最佳答案
这是一个实现细节。您不确定,这并不重要,平台之间可能会有所不同,并且将来可能会发生变化。
但是,您可以进行有根据的猜测:首先,SoundEffectInstance
存在,并且您将声音文件加载到SoundEffect
中这一事实表明SoundEffect
可能负责将声音效果保存在内存中。 SoundEffect.FromStream
和基于缓冲区的SoundEffect
构造函数的存在强烈表明SoundEffect
必须具有在内存中保留声音缓冲区的机制。因此,可以很安全地假定从文件加载SoundEffect
时,它使用相同的机制。
如果确实很重要,则可以在加载SoundEffect
之后,通过删除或修改声音文件来测试它,然后创建一个实例。
与往常一样,如果性能真的很重要,则应该对其进行评估。
当然,创建SoundEffectInstance
确实会分配资源(语音,托管的(可能还有非托管的)内存)。因此,如果可以避免的话,就不应该定期创建它(例如通过池化和重用实例)。当您使用SoundEffect.Play
时,SoundEffect
会在内部为您管理SoundEffectInstance
对象池。
关于c# - SoundEffect.CreateInstance是否每次都从文件加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6351421/