Я в настоящее время разрабатываю .NET C# xna игровой механизм.
Я пытался выяснить способ иметь менеджера по обновлению / планировщик / система событий. Я в настоящее время использую делегатов, чтобы позволить создавать динамические запланированные задачи и события.
Я недавно считал, что делегаты могут быть медленными. Делегаты в моей игре вызываются каждый кадр, и я задавался вопросом, может ли быть хит производительности из этого?
Обновление:
Я также просто нашел этот http://blogs.msdn.com/b/shawnhar/archive/2007/07/09/delegates-events-and-garbage.aspx
Это - то, по поводу чего я волновался, и я предполагаю, что может быть путь вокруг этого. Спасибо за все другие информация.
Не беспокойтесь об этом - делегаты немного медленнее, чем обычный вызов функции, но если вы не вызываете их несколько миллионов раз в секунду, я очень сомневаюсь, что вы заметите.
Я бы посоветовал придерживаться делегатов, если только это не станет узким местом.
Независимо от того, может ли быть падение производительности, лучший вопрос - есть ли это падение производительности. Вы должны измерить производительность приложения с делегатами и без них, чтобы определить, является ли любое снижение производительности приемлемым.
Я повторю здесь ответы всех остальных, поскольку делегаты не являются проблемой, если только они не являются проблемой - профилировщики - ваш друг.
Одна вещь, на которую следует обратить внимание, может быть проблемой, - это если вы повторно создаете делегатов в каждом кадре - в этом случае вы можете генерировать лишний мусор, что снизит вашу производительность. Однако используйте такие инструменты, как профилировщик CLR, чтобы сначала определить, является ли это проблемой для вас.
Ваши предположения (и наши предположения) не будут точными и не обязательно совпадут с реальной производительностью вашей игры. Единственный способ узнать реальное снижение производительности - это хотя бы один вид профилирования. Зачем измерять, когда вы можете догадываться?
Помимо фактического измерения вашей производительности, подумайте: имеет ли это значение? Если ваша игра работает со скоростью 60 кадров в секунду (мне даже нравится 30 кадров в секунду в динамичных играх, и я могу справиться с 20 кадрами в секунду, если она медленнее, как в пошаговой игре), и вы можете достигать 300 кадров в секунду в переменное время -шаговый режим, и делегаты будут стоить вам целых 20 кадров (кстати, они, вероятно, не будут) ... ваша игра все еще может поддерживать 60 кадров в секунду в режиме фиксированного временного шага.
Очевидно, что некоторые перфомансы с делегатом и прямым вызовом метода, но с современными (читайте: сообщение v1.1) версиями CLR, это примерно так же быстро, как вызов метода через интерфейс.
Вот таблица приблизительных показателей производительности: http://msdn.microsoft.com/en-us/magazine/cc507639.aspx
Как всегда, вы должны измерить, устраивает ли вас производительность. Поскольку я использовал делегатов в критически важном для производительности коде (анимации) и не испытывал проблем, я ожидал, что это сработает для вас.