2008-12-15 12 views
15

Dado que XAML se compila, no debería haber diferencia en la ejecución de código como este.
Winforms (código como):Comparación de rendimiento de Winforms y WPF

Form formPeter = new Form(); 
Textbox textbox = new Textbox(); 
Label l1 = new Label1(); 

Xaml no consigue Analizada en tiempo de ejecución, como pensaba ... :-)

Pero ¿qué pasa con la representación/ejecución de grandes formas con gran cantidad de controles? ¿Qué tecnología es más rápida?

Respuesta

20

el que la tecnología es más rápido? Me temo que tu pregunta realmente no tiene una respuesta simple.

Su comentario acerca de que XAML no se analiza en el tiempo de ejecución es verdadero y falso. Mientras que XAML no se analiza, una versión binaria normalizada (incorporada como un recurso en la aplicación) llamada BAML es analizada en tiempo de ejecución. Decir que DirectX es más rápido que GDI también es algo así como una simplificación: las tecnologías de renderizado basadas en WPF y GDI solo tienen diferentes características de rendimiento. Por ejemplo, WPF utiliza un modo de representación retenido, mientras que WinForms y otras tecnologías basadas en GDI no lo hacen. Los objetos de WPF tienden a ser mucho más pesados ​​porque admiten muchas muchas más propiedades que sus contrapartes de winforms. Tenemos décadas de conocimiento sobre cómo hacer que GDI sea bastante rápido, y solo un tiempo relativamente corto con WPF y XAML.

WPF es lo suficientemente rápido para escribir aplicaciones, pero debe vigilar constantemente que su conteo de elementos no desaparezca (creando plantillas demasiado complicadas por ejemplo, y luego repitiéndolas cientos o miles de veces en su UI) Además, WPF funciona de forma diferente en hardware de gráficos diferentes (ya que llama a DirectX internamente). El contenido 2D debería estar bien en WPF, incluso si está totalmente renderizado en software (por ejemplo, en una máquina virtual), pero el 3D animado y antialias con muchos elementos requiere una potencia real de GPU. A medida que pasa el tiempo y el hardware de gráficos se vuelve más poderoso y prevalente, y mejora el conocimiento sobre cómo mejorar el rendimiento de WPF, deberíamos ver a WPF más adelante (suponiendo que sea leve, ahora ... para algunos escenarios ... a veces). Así que supongo que la respuesta es "depende".

+0

Diría que los objetos WPF tienden a ser más livianos debido a la escasa infraestructura de almacenamiento de WPF. Los valores de propiedades de dependencia solo se almacenan si varían de su valor predeterminado, por lo que se realizan grandes ahorros en la memoria. –

+3

Soy curioso y un poco pesimista sobre el rendimiento en el servidor de terminal. – Guge

+2

También deberías ser, Guge. WPF envía gráficos en lugar de comandos primitivos o tokens que representan controles. AFAIK, Microsoft tampoco se ha comprometido a hacer nada para solucionar esta situación. –

6

WPF usa DirectX para renderizar (que es mucho más rápido) en lugar del Windows GDI nativo.

Como ya sabrá, Native GDI está basado en mapas de bits. Como WPF se basa en vectores, WPF puede hacer uso del soporte de hardware, de una manera mucho mejor en comparación con GDI.

Sin embargo, la decisión de elegir WPF o Winforms depende en gran medida de otros factores: la flexibilidad que necesita en la interfaz de usuario, la cantidad de medios que necesita su aplicación, etc. WPF no sustituye a Winforms, y no es una bala de plata para todos los problemas.

Con más características de aceleración de hardware por venir, WPF puede entregar mucho mejor que sus aplicaciones Winform.

Un par de blogs interesantes que leo ealier.

John's Post

Rob's Post

3

El dibujo WPF es mucho más rápido, pero los objetos son más pesados. Si arrojas 1000 botones separados, se arrastrará. Por otro lado, esos botones pueden tener transparencias y degradados complejos sin un golpe de rendimiento significativo.

Cuestiones relacionadas