2010-09-02 13 views
14

El evento CompositionTarget.Rendering es un antiguo manejador de eventos antiguo, con un simple antiguo EventArgs. Sin embargo, en la vida real, aparentemente siempre obtiene una instancia de RenderingEventArgs. Por lo tanto, su controlador de eventos debe comenzar lanzando EventArgs para obtener la información útil de ellos.¿Por qué CompositionTarget.Rendering toma EventArgs en lugar de RenderingEventArgs?

¿Por qué no es el caso de tipo EventHandler<RenderingEventArgs>, por lo que podría llegar a los argumentos más fácilmente (y más importante, por lo que incluso podría conocer los argumentos son allí)? ¿Por qué Microsoft habría elegido dar a este evento la firma incorrecta?

Me pregunté acerca de la compatibilidad con versiones anteriores: ¿hubo algún release donde RenderingEventArgs aún no existía? - pero ese no parece ser el caso. Según MSDN, RenderingEventArgs y CompositionTarget se introdujeron en la misma versión en ambas plataformas: en WPF, ambas se agregaron en .NET 3.0; en Silverlight, ambos se agregaron en Silverlight 3.0.

Si da algún tipo de pista, me encontré con un antiguo discussion thread en el que alguien dijo: "El delegado está utilizando EventArgs porque hay algún tipo de ganancia de rendimiento en organizar al hacer eso". Si alguien puede explicar qué tipo de ganancia de rendimiento podría ser, estaría dispuesto a aceptar eso como una respuesta.

+0

+1: Lo mismo sucede con los eventos del mouse también. A menudo necesita cambiarlos manualmente a MouseEventArgs más específicos para obtener las propiedades * cool *. –

Respuesta

2

La victoria de clasificación es posiblemente una cuestión de gestión de memoria de bajo nivel. Debido a que EventArgs es la forma más común de argumento para un evento, es probable que haya búferes preasignados en la implementación de manejo de eventos de bajo nivel del complemento. Incluso puede ser solo una ganancia en algunas plataformas y solo con renderizado intensivo.

La velocidad de reproducción se ha mejorado significativamente en las últimas versiones de SL y sospecho que son los ajustes como este los que están logrando esto.

Es un dolor cuando la interfaz sufre debido a la implementación, pero es una compensación justa si la ganancia es significativa. Además, en este caso no hay una pérdida real de la funcionalidad, ya que es bastante fácil de emitir y obtener los datos subyacentes.

Cuestiones relacionadas