2008-10-21 27 views
48

Me encanta programar con y para Windows Presentation Framework. Sobre todo escribo aplicaciones tipo navegador usando WPF y XAML.¿Cómo acelerar los programas WPF?

Pero lo que realmente me molesta es la lentitud de WPF. Una página simple con solo unos pocos controles se carga lo suficientemente rápido, pero tan pronto como una página es un poco más compleja, como contener muchos campos de entrada de datos, uno o dos controles de pestañas, y cosas así, se vuelve doloroso.

La carga de dicha página puede durar más de un segundo. Segundos, de hecho, especialmente en computadoras no tan rápidas (léase: las computadoras de los clientes) puede llevar años.

Lo mismo con los valores cambiantes en la página. Todo sobre la interfaz de usuario de WPF es de alguna manera sluggy.

¡Esto es tan malo! Me dan este hermoso marco, pero lo hacen tan insoportablemente lento, ¡así que tendré que disculparme con nuestros clientes todo el tiempo!

Mi Pregunta:

  1. ¿Cómo se puede acelerar WPF?
  2. ¿Cómo perfila los cuellos de botella?
  3. ¿Cómo lidiar con la lentitud?

Dado que este parece ser un problema universal con WPF, estoy buscando consejos generales, útiles para muchas situaciones y problemas.

Algunas otras preguntas relacionadas:

+0

el equipo de Evernote escribir que con el tiempo sólo tenía que [abandonar WPF] (http://blog.evernote.com/2010/10/26/evernote-4-for-windows -is-here /) para obtener un rendimiento aceptable. – Crashworks

Respuesta

36
  1. ¿Cómo acelerar WPF?

    A menudo, después de utilizar una de las siguientes herramientas de creación de perfiles, es obvio lo que está causando mis cuellos de botella.

    • Si la memoria es el problema, virtualizo mis datos.
    • Si el problema es el tiempo de renderizado, virtualizo los controles o simplifico las plantillas de control siempre que sea posible.
    • Si el problema es el tiempo de procesamiento, intento mejorar mi algoritmo o mover ese trabajo a un hilo de fondo y mostrar un latido en mi interfaz de usuario mientras el trabajo está en marcha.

  2. ¿Cómo perfilar cuellos de botella?

  3. Cómo ¿lidias con la lentitud?

    Perfilado y asesoramiento.

+9

¿Qué quiere decir con "virtualizar" los datos/controles? –

+1

(+1) para una excelente respuesta.Sin embargo, creo que deberías expandirte a 3, porque el resto de tu respuesta es muy profesional. Ya lo ha respondido parcialmente con 'show throbber en UI', y hay otras opciones como precargar, renderizar secuencialmente, dividir páginas, etc. La pregunta 3 es la pregunta más práctica más amplia en el sentido de la aplicación (es decir, UX), y por eso merece alguna consideración. – DevinB

+6

Al 'virtualizar' el OP significa esto: para un control con muchos elementos (como un control de lista), solo mantenga los elementos visibles en la memoria, nunca el conjunto completo de elementos. Esto ahorra memoria cuando tienes una gran cantidad de artículos, ya que solo tienes que almacenar tantos elementos como sean visibles para el usuario, no todo el conjunto. – Dan

6

instalar el SP1 ... Un montón de muy frías aumenta el rendimiento de WPF !!!

Leer más here

Aquí está un ejemplo de 2 enhanchements hechas en el SP1: Deffered scrolling & UI Element recyceling !!!

+0

Los que podría "notar" primero son las mejoras de desplazamiento y encuadernación ... Lea más aquí: http://dotnet.org.za/rudi/archive/2008/05/22/scrolling-performance-in- wpf.aspx – rudigrobler

1

evitar las animaciones también ayuda mucho a veces. si tiene que usar animaciones, disminuya la velocidad de cuadros, esto mejorará el rendimiento "espeso"

2

WPF está diseñado para computadoras con tarjetas gráficas modernas. ¿Sus clientes tienen tarjetas gráficas modernas capaces de ejecutar Aero? Si sus clientes tienen tarjetas gráficas antiguas, WPF recurrirá a la prestación de software, que es extremadamente lenta en comparación con los gráficos acelerados por hardware.

También es posible que desee crear un perfil de su aplicación para asegurarse de que en realidad WPF es la parte lenta. Es posible que haya algo más que sea realmente el cuello de botella.

0

¿Puede dar más detalles?

Solo noté un rendimiento lento cuando uso algo como una vista de lista o una cuadrícula que tiene cierta complejidad. La solución es simplificarlo.

Aparte de eso, solo noté un rendimiento lento al cargar la aplicación por primera vez.

HTH

1

Eliminar alpha transparency/bitmap effects.

0

Encuentro útil dar un paso al costado del XAML y escribir toda la UI en C#. Esto me permite controlar con precisión cuándo se crean y cargan los controles. También me ayuda a entender lo que XAML está haciendo "bajo las sábanas".

+0

Eso solo le brinda control granular sobre los controles cuando lo necesita. No necesariamente mejora el rendimiento. – jlafay

5

No puedo agregar comentarios, es por eso que publico una nueva respuesta a esto: Encontré este video del pdc09 que brinda algunas ideas sobre cómo perfilar las aplicaciones wpf y porque me ayudó mucho, quiero compartir el enlace:

Advanced WPF Application Performance Tuning and Analysis

+0

Direct2D> WPF :) – Puppy

Cuestiones relacionadas