Solo para señalar, en mi experiencia el renderizador WPF es de hecho bastante más lento que Windows Forms, a pesar de usar DirectX . Esto se debe a que se realizan muchos cálculos de tesselación y diseño en el lado de la CPU, lo que cancela de manera efectiva la ganancia de rendimiento del uso de la GPU.
Simplemente busque "WPF Slow" o "WPF Performance" y descubrirá horrorizados a los desarrolladores que aprendieron el tiempo y el esfuerzo de convertir WinForms en WPF debido a la pérdida de GPU, ya que el resultado es más lento que la aplicación original.
Sin embargo ... Voy a decir esto. WPF es muy superior a WindowsForms en términos de diseño, capacidades gráficas, productividad del desarrollador (enlace de datos), animación, apariencia, etc. Si el rendimiento realmente es un problema, en ciertas áreas puede optimizarlo. Por ejemplo, ¿sabías que puedes obtener una API para escribir directamente en el mapa de bits en WPF (ver la clase WriteableBitmap) para hacer operaciones similares a GDI en la memoria? Esto es (sorprendentemente) aproximadamente 20 veces más rápido que las primitivas WPF para algunas operaciones.
De manera similar, puede usar la virtualización para mejorar el rendimiento de las cuadrículas de datos, etc. Telerik tiene un ejemplo de su cuadrícula desplazándose 1,000,000 filas en tasas de cuadros interactivos.
En conclusión, piense en lo que está haciendo y vea ejemplos similares en la web. ¿Estás haciendo una adquisición y visualización de datos científicos en tiempo real o simplemente una línea estándar de aplicaciones de negocios? Comparar ejemplos similares para ver de qué es capaz el marco te ayudará en tu decisión.
Actualización 2013 Q3
Como una actualización, en diversos proyectos que estoy viendo ahora más rápido y un rendimiento más rápido de WPF moviendo cualquier cosa y todo lo que fuera el hilo de interfaz de usuario. P.ej. Deje el hilo de la interfaz de usuario solo para la interfaz de usuario, haga todo el trabajo posible con la Biblioteca de tareas paralelas o RX. Haga que todo esté sincronizado y no bloquee el subproceso de interfaz de usuario mientras espera.
Elimine los errores de enlace, ya que contribuyen a los problemas de rendimiento de WPF.
Puede mover animaciones (por ejemplo, esperar o cargar animaciones) en un hilo diferente para la animación sin problemas. Puede usar render-to-bitmap cuando realiza transiciones animadas.
¿La larga historia corta? Es posible obtener un gran rendimiento de las aplicaciones de WPF (así como de una interfaz de usuario ingeniosa), ¡pero es necesario que trabaje un poco más!
¿Está dirigido a sistemas operativos específicos? –
No, solo tengo curiosidad por saber cómo difiere el rendimiento inicial entre los diferentes tipos y por qué. –