Desafortunadamente, este es un caso en el que es muy difícil hacer una comparación directa del rendimiento relativo, ya que el lugar donde aparecería cualquier degradación es profundo en el motor WPF. En los primeros días de WPF, el uso de StaticResource fue uno de los cambios de ajuste de rendimiento estándar que se recomendaba y tendíamos a seguirlo bastante estrictamente en nuestra organización y recomendarlo a otros. Me molestó mucho que Blend hiciera todo a Dynamic, aunque eso le ayudó a procesar recursos de otros archivos de forma adecuada en el momento del diseño.
Con el tiempo, mi visión sobre esto ha cambiado, debido en parte a la experiencia personal, pero también a los comentarios de las personas en el equipo de Blend en Microsoft. Como seguramente sabrá, Blend está escrito completamente en WPF y tiene un tema alternativo completo (Light) que se puede activar mientras se ejecuta la aplicación. Esto es posible porque usaron DynamicResource para prácticamente todo su estilo. Según ellos, esto realmente no les causó ningún problema de rendimiento real. Dado que Blend es probablemente la aplicación WPF más utilizada en la actualidad, tiendo a dar un peso significativo a sus puntos de vista.
La otra cosa a tener en cuenta es la utilidad real de DynamicResource. La capacidad de cambiar el estilo sobre la marcha es una parte del mismo, pero también la flexibilidad que le brinda al crear su jerarquía de Recursos puede facilitar mucho la administración de estilos compartidos. Estoy seguro de que se encontró con una situación en la que una referencia de StaticResource explotó en el tiempo de ejecución porque el recurso al que apuntaba debía cargarse en una rama diferente de la jerarquía.
Obviamente, StaticResource es muy útil para señalar una clave específica que sabe que estará disponible en el momento adecuado. Cuando escribo a mano XAML, todavía tiendo a usarlo todo el tiempo. Pero dada la productividad que obtiene al tener un diseñador que genere su XAML en Blend, cualquier ganancia de rendimiento pequeña que pueda obtener probablemente no valga la pena de la mano, manteniendo todo como Estático.
Con respecto a su afirmación "Obviamente, StaticResource es muy útil para señalar una clave específica usted sabe que estará disponible en el momento adecuado ". ¿Esto significa que un DynamicResource pierde la verificación del tipo de tiempo de compilación y se mueve al tiempo de ejecución? – scobi
Sí. En la mayoría de los casos, una referencia de DynamicResource que no se resuelve obtendrá un valor predeterminado (como Negro para Pinceles) y esperará a que aparezca la clave que está buscando. Realmente no hay ninguna forma para que el compilador valide esa situación por sí mismo. –
¡Eso fue muy útil, gracias! –