Почему CompositionTarget.Rendering принимает EventArgs вместо RenderingEventArgs?
Событие CompositionTarget.Rendering - это простой старый EventHandler с простым старым EventArgs. Однако в реальной жизни он, по-видимому, всегда получает экземпляр RenderingEventArgs. Таким образом, ваш обработчик событий должен начать с того, что вы выбрали EventArgs, чтобы извлечь из них полезную информацию.
Почему это не событие типа EventHandler<RenderingEventArgs>
, поэтому мы могли бы легче перейти к аргументам (и что более важно, чтобы мы могли даже знать, что существуют аргументы)? Почему Microsoft выбрала для этого события неправильную подпись?
Я задавался вопросом о обратной совместимости - был ли релиз, где RenderingEventArgs еще не существует? - но это, похоже, не так. Согласно MSDN, RenderingEventArgs и CompositionTarget были представлены в той же версии на обеих платформах - в WPF оба были добавлены в .NET 3.0; в Silverlight оба были добавлены в Silverlight 3.0.
Если он дает какой-либо намек, я наткнулся на старый дискуссионный поток, где кто-то сказал: "Делегат использует EventArgs, потому что некоторые вид победы производительности при сортировке, делая это". Если кто-то может объяснить, какой может быть победа в производительности, я бы согласился принять это как ответ.
Ответы
Ответ 1
Маршиллинг-победа, возможно, является инструментом управления памятью низкого уровня. Поскольку EventArgs является наиболее распространенной формой аргумента для события, вероятно, будут предварительно выделенные буферы в реализации обработки событий низкого уровня для плагина. Это может быть даже победой на некоторых платформах и только с интенсивным рендерингом.
В последних версиях SL была значительно улучшена скорость рендеринга, и я подозреваю, что это такие настройки, которые получают, приводят к этому.
Это боль, когда интерфейс страдает из-за реализации, но это справедливый компромисс, если выигрыш значителен. Кроме того, в этом случае нет никакой реальной потери функциональности, поскольку ее довольно легко отличить и получить базовые данные.