C# делегируют производительность в xna игре

Я в настоящее время разрабатываю .NET C# xna игровой механизм.

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

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

Обновление:

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

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

5
задан Chris Watts 9 July 2010 в 05:21
поделиться

5 ответов

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

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

8
ответ дан 18 December 2019 в 16:35
поделиться

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

1
ответ дан 18 December 2019 в 16:35
поделиться

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

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

1
ответ дан 18 December 2019 в 16:35
поделиться

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

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

1
ответ дан 18 December 2019 в 16:35
поделиться

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

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

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

1
ответ дан 18 December 2019 в 16:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: