c# - SoundEffect.CreateInstance是否每次都从文件加载?

标签 c# audio xna soundeffect soundeffectinstance

这一直困扰着我。如果我通过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/

相关文章:

c# - 未经授权的访问异常 : how to wait on input from user. Windows Phone c#

c# - 从大小为 n 的 r 个元素生成幂多重集

c# - ASP.NET - 将 C# 变量传递给 HTML

javascript - Howler.JS + Angular - 播放声音文件的路径

audio - 从哪里开始学习音频处理?

xna - 在 XNA 4.0 winforms 中使用 Nvidia FXAA(着色器抗锯齿)的示例?

c# - 使用 IComparable 对对象进行排序

java - 如何将输入流连接到sounpool或mediaplayer?

c# - 在没有 Draw() 的情况下缩放 Texture2D

c# - 如何使用2D图形实现3D太空潜水