2010-04-23 8 views
9

Por lo tanto, estoy construyendo una aplicación WPF e hice una implementación de prueba hoy, y encontré que funcionó bastante mal. Me sorprendió, ya que no estamos haciendo mucho en cuanto a efectos visuales o animaciones.WPF: Mejorando el rendimiento para correr en PCs antiguas

Implementé en dos máquinas: la más rápida y la más lenta que necesitará ejecutar la aplicación (la PC más lenta tiene Intel Celeron 1.80GHz con 2GB de RAM). La aplicación funcionó bastante bien en la máquina más rápida, pero estaba picado en la máquina más lenta. Y cuando digo "entrecortado", quiero decir que el cursor saltó incluso al pasarlo sobre cualquier ventana abierta de la aplicación que tenía foco.

Abrí la ventana Performance Manager Performance, y pude ver que el uso de la CPU saltó cada vez que la aplicación tenía el foco y el cursor se movía sobre ella. Si le di enfoque a otro (por ejemplo, Excel), el uso de la CPU volvió a bajar después de un segundo. Esto ocurrió en ambas máquinas, pero el picor solo se notaba en la máquina más lenta. Tenía muy poco tiempo para jugar en las máquinas de implementación, así que no hice muchas pruebas detalladas.

La aplicación funciona bien en mi máquina de desarrollo, pero también veo que la CPU aumenta hasta un 10% allí, simplemente con el cursor sobre la ventana.

He descargado la herramienta de rendimiento WPF de MS y he estado retocando con ella (en mi máquina de desarrollo). Los documentos dicen lo siguiente acerca del "Frame Rate" métrica en la herramienta Perforador:

para aplicaciones sin animación, este valor debe estar cerca de 0.

La aplicación no está haciendo ningún tipo de animación pesada, pero la velocidad de cuadro permanece cerca de 50 cuando el cursor está sobre cualquier ventana. Las pantallas en las que he probado tienen encabezados de columna en una cuadrícula que resaltan y botones que cambian de color y apariencia cuando se desplazan. Incluso mover el mouse sobre áreas en blanco de las ventanas causa la misma velocidad de cuadros y el mismo uso de la CPU (no parece estar relacionado con estas animaciones menores).

(También, no puedo encontrar la manera de conseguir cualquier cosa menos las dos herramientas por defecto - perforador y de perfiles de Visual - instalados en la herramienta de rendimiento WPF Eso es probablemente una cuestión aparte.).

También tengo la herramienta de perfilado de Redgate, pero no estoy seguro de si eso puede arrojar alguna luz sobre el rendimiento de la representación.

Por lo tanto, me doy cuenta de que esto no es una cosa fácil de solucionar sin detalles o código de muestra (que no puedo publicar). Mis preguntas son:

  • ¿Cuáles son algunas cosas generales que debe buscar para (o evitar) en el código para mejorar el rendimiento ?
  • ¿Qué pasos puedo seguir usando la herramienta de rendimiento WPF para reducir el problema ?
  • ¿Las especificaciones de PC mencionadas anteriormente (Intel Celeron 1.80GHz con 2GB de RAM) son demasiado lentas para ejecutarse incluso en las aplicaciones WPF de vanilla?

Respuesta

3

¿Está aplicando BitmapEffect -s a los elementos de su UI? No son manejados por GPU, por lo que la CPU se encarga de renderizarlos. Si no se usa correctamente (por ejemplo, si se aplica un efecto OuterGlowBitmapEffect a un elemento complejo grande), puede tener un impacto terrible en el rendimiento.

Además, aún puede querer probar el perfil de su aplicación con un perfilador de rendimiento. Solo para ver si no es tu código el que causa esto.

0

Esto no es normal para WPF. Sospecho que uno de tus desarrolladores ha escrito código que ejecuta un temporizador en segundo plano (o más probablemente dada tu descripción, un manejador de movimiento del mouse) que afecta la UI de alguna manera .

Si tienes un analizador de rendimiento ANTS (es realmente agradable) lo correría sobre tu aplicación y reproduciría el problema.

Una vez que haya hecho eso, ANTS debería decirle con bastante rapidez cuál es el problema. Si ANTS no revela nada en absoluto, y le muestra que, de hecho, ninguno de su código se está ejecutando durante este tiempo, entonces sospecho que los controladores de la tarjeta gráfica son defectuosos.

Puede probar esto mediante la desactivación de la aceleración de hardware mediante el establecimiento de la clave de registro siguiente, y volver a intentarlo:

HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics\DisableHWAcceleration to 1 

Nota: el valor DisableHWAcceleration debería haber un DWORD

Cuestiones relacionadas