Pregunta

Nuestro diseñador está utilizando mezcla con el estilo de nuestra aplicación de WPF. Cuando elige los recursos locales para las propiedades, mezcla las aplicará como {DynamicResource} en lugar de un {StaticResource}. Mi conjetura es que Blend hace esto, ya que permite la aplicación para ser re-temáticos en tiempo de ejecución sin tener que reiniciarlo.

Mi pregunta es: ¿hay un costo de rendimiento significativa a esta búsqueda adicional? Hay que pedirle al diseñador para volver atrás y cambiar manualmente esa dinámica a estática?

Esta es una pregunta muy bueno, así que explica la diferencia entre los tipos: ¿Cuál es la diferencia entre StaticResource y DynamicResource en WPF?

¿Fue útil?

Solución

Por desgracia, este es un caso en el que es muy difícil hacer una comparación directa del rendimiento relativo ya que el lugar donde cualquier degradación aparecería es profunda en el motor de WPF. En los primeros días de WPF el uso de StaticResource fue uno de los cambios de optimización de rendimiento estándar que se recomiendan y que tendía a seguirlo muy estrictamente en nuestra organización y lo recomendaría a otros. Yo estaba muy molesto que hizo Mezcla dinámico a pesar de que todo lo que ayudó a que acabe con los recursos de otros archivos correctamente en tiempo de diseño.

Con el tiempo mi opinión sobre esto ha cambiado, debido tanto a la experiencia personal, sino también la retroalimentación de personas en el equipo de mezcla de Microsoft. Como usted probablemente sabe, Blend está escrito completamente en WPF y tiene un tema alternativo completa (luz) que se puede cambiar sobre la marcha mientras se ejecuta la aplicación. Esto es posible debido a que utilizaron DynamicResource para casi la totalidad de su estilo. Según ellos, esto realmente no les causa ningún problema real de Potencia. Dado que la mezcla es probablemente la aplicación de WPF más utilizado en existencia, que tienden a dar un peso significativo a sus puntos de vista.

La otra cosa a tener en cuenta es real utilidad de DynamicResource. La capacidad de cambiar el estilo sobre la marcha es una parte de ella, sino también la flexibilidad que le da en la construcción de su jerarquía de recursos puede hacer que sea mucho más fácil de gestionar los estilos compartidos. Estoy seguro de que le han acabado en una situación en la que una referencia StaticResource explotó en tiempo de ejecución porque el recurso se señaló que iba a ser cargado en una rama diferente de la jerarquía.

Obviamente StaticResource es muy útil para que apunta a una clave específica que sabe que va a estar disponible en el momento adecuado. Cuando XAML-escritura a mano que todavía tienden a utilizar todo el tiempo. Pero dada la productividad ganas de tener un diseñador de generar su XAML en Blend, cualquier pequeña ganancia de rendimiento que podría obtener es, probablemente, no vale la pena los gastos generales de mantenimiento de la mano todo como estática.

Otros consejos

No se dice que es una diferencia de rendimiento, pero si es "significativo" dependerá de la cantidad de búsquedas dinámicas están sucediendo. A menos que tenga miles de referencias DynamicResource que probablemente no va a ser notable en ambos sentidos; si los recursos dinámicos que llevan a cabo mucho peores que los estáticos, sospecho Mezcla sería más conservadora sobre la generación de ellos.

De hecho, cuando me encontré con una prueba ingenuo, me encontré con el resultado contrario a la intuición de que DynamicResource corrió rápido que StaticResource (con 3000 referencias de recursos, vi tiempos de carga de alrededor de 200 ms cuando solía DynamicResource por todo vs . alrededor de 400 ms para StaticResource).

Esta era una prueba realista por numerosas razones: todas las referencias eran a la misma cosa, yo estaba corriendo en el depurador, etc. etc. Pero sugiere que sería prematuro poner esfuerzo en modificar la salida de Mezcla "por si caso" - y que si lo hace notar una desaceleración que puede no ser necesariamente la culpa de las referencias DynamicResource - siempre mida

Por desgracia, si cambia los recursos dinámicos de nuevo a la estática, se romperá Blend. Esto parece ser especialmente cierto cuando se utiliza UserControls que hacen referencia a los recursos dinámicos, si cambia a estática del control no hará que cuando alojada dentro de otro control en la mezcla.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top