SoundEffect.CreateInstance загружается из файла каждый раз?

Это то, что беспокоило меня. Если я создам SoundEffectInstance с помощью SoundEffect.CreateInstance() Я должен избавиться от этого, когда я закончу с этим. SoundEffect.CreateInstance() не использует ContentManager насколько я могу судить.

Так он загружается из файла или хранит копию в памяти? Загрузка из файла, очевидно, будет очень медленной:-/

1 ответ

Решение

Это деталь реализации. Вы не знаете наверняка, это не имеет значения, оно может отличаться для разных платформ и может измениться в будущем.

Однако вы можете сделать обоснованное предположение: прежде всего тот факт, что SoundEffectInstance существует, и что вы загружаете звуковые файлы в SoundEffect указывает на то, что SoundEffect вероятно, отвечает за удержание звукового эффекта в памяти. И существование SoundEffect.FromStream и на основе буфера SoundEffect конструкторы являются убедительными признаками того, что SoundEffect должен иметь механизм для сохранения звукового буфера в памяти. Поэтому довольно безопасно предположить, что при загрузке SoundEffect из файла, он использует тот же механизм.

Если это действительно важно, вы можете проверить его, удалив или изменив звуковой файл, после загрузки SoundEffect, а затем создать экземпляр.

Как всегда, если производительность действительно важна, вы должны измерить ее.

Конечно, создание SoundEffectInstance распределяет ресурсы (аудио голоса, управляемая и, возможно, неуправляемая память). Так что это не то, что вы должны создавать регулярно, если вы можете избежать этого - например, путем объединения и повторного использования экземпляров. Когда вы используете SoundEffect.Play, затем SoundEffect внутренне управляет пулом SoundEffectInstance объекты для вас.

Другие вопросы по тегам