SoundEffect.CreateInstance загружается из файла каждый раз? - PullRequest
0 голосов
/ 15 июня 2011

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

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

1 Ответ

3 голосов
/ 15 июня 2011

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

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

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

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

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

...