C # делегат производительности в игре xna - PullRequest
5 голосов
/ 09 июля 2010

В настоящее время я занимаюсь разработкой игрового движка C # .net xna.

Я пытался найти способ иметь менеджер обновлений / планировщик / систему событий.В настоящее время я использую делегатов, чтобы обеспечить способ создания динамических запланированных задач и событий.

Я недавно прочитал, что делегаты могут работать медленно.Делегаты в моей игре вызываются каждый кадр, и мне было интересно, может ли из-за этого снизиться производительность?

Обновление:

Я также только что нашел это http://blogs.msdn.com/b/shawnhar/archive/2007/07/09/delegates-events-and-garbage.aspx

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

Ответы [ 5 ]

8 голосов
/ 09 июля 2010

Не беспокойтесь об этом - делегаты немного медленнее, чем обычный вызов функции, но если вы вызываете их несколько миллионов раз в секунду, я очень сомневаюсь, что вы заметите.придерживаться делегатов, если это не является узким местом.

1 голос
/ 09 июля 2010

Я повторю ответы всех остальных здесь, в том смысле, что делегаты не являются проблемой, если они не являются проблемой - профилировщики - ваш друг.

Одна вещь, на которую следует обратить внимание, может Беда в том, что вы воссоздаете делегатов каждый кадр - в этом случае вы можете генерировать лишний мусор, который снизит вашу производительность.Однако сначала используйте такие инструменты, как профилировщик CLR, чтобы определить, является ли это проблемой для вас.

1 голос
/ 09 июля 2010

Ваши предположения (и наши предположения) не будут точными и не обязательно будут соответствовать реальной производительности вашей игры. Единственный способ узнать фактическое снижение производительности - это по крайней мере один вид профилирования. Зачем измерять, когда можно догадаться?

Помимо получения фактического измерения вашей работы, подумайте: имеет ли это значение? Если ваша игра работает на скорости 60 кадров в секунду (я даже наслаждаюсь скоростью 30 кадров в секунду в играх с высокой скоростью, и я могу справиться с низкой скоростью на 20 кадрах в секунду, если она медленнее, как в пошаговой игре), и вы способны достигать 300 кадров в секунду в переменное время -шаговый режим, и делегаты стоят вам целых 20 кадров (они, вероятно, не будут, между прочим) ... ваша игра все еще может поддерживать 60 кадров в секунду в режиме фиксированного временного шага.

1 голос
/ 09 июля 2010

Очевидно, что есть некоторый перфект с делегатом по сравнению с прямым вызовом метода, но с современными (читай: пост v1.1) версиями CLR это примерно так же быстро, как вызов метода через интерфейс.

Вот таблица приблизительных показателей: http://msdn.microsoft.com/en-us/magazine/cc507639.aspx

Как всегда, вы должны измерить, чтобы убедиться, что производительность приемлема для вас. Поскольку я использовал делегатов в критически важном для производительности коде (анимации) и не испытывал проблем, я ожидал, что это сработает для вас.

1 голос
/ 09 июля 2010

Независимо от того, может ли быть ударом по производительности, лучше задать вопрос, является ли ударом по производительности.Вы должны измерить производительность приложения с делегатами и без них, чтобы определить, является ли приемлемым снижение производительности.

...