WPF Performance Suite

Windows SDK incluye un conjunto de herramientas de generación de perfiles de rendimiento para las aplicaciones Windows Presentation Foundation (WPF). Este conjunto de herramientas, denominado WPF Performance Suite, permite analizar el comportamiento en tiempo de ejecución de las aplicaciones WPF y determinar la optimización del rendimiento que se puede aplicar. WPF Performance Suite incluye las herramientas de generación de perfiles de rendimiento denominadas Perforator y Visual Profiler. En este tema se describe cómo instalar y usar las herramientas Perforator y Visual Profiler en WPF Performance Suite.

Este tema contiene las siguientes secciones:

  • Instalación de WPF Performance Suite

  • Inicio de WPF Performance Suite

  • Perforator

  • Generador de perfiles visuales

Instalación de WPF Performance Suite

Siga estos pasos para instalar WPF Performance Suite.

  1. Si tiene instalada una versión anterior de Windows Performance Toolkit, desinstálela.

  2. Instale el SDK de Windows.

    En las opciones de instalación, asegúrese de que selecciona la opción Windows Performance Toolkit en Utilidades comunes. Para obtener información sobre la descarga, vea la página de descarga de Windows SDK.

  3. Después de instalar Windows SDK, en el menú Inicio, seleccione Todos los programas, Microsoft Windows SDK v7.1 y Herramientas.

  4. En Herramientas, haga clic en Instalar Windows Performance Tool Kit.

    Aparece el asistente para la instalación.

  5. Siga las instrucciones en pantalla para instalar Windows Performance Toolkit.

    De forma predeterminada, se instalarán las siguientes características.

    • Performance Analyzer

    • Ayuda de Windows Performance Toolkit

    • GPUView

    • WPF Performance Suite

Inicio de WPF Performance Suite

Inicie WPF Performance Suite antes de ejecutar la aplicación para la que desea generar un perfil. Para poder usar WPF Performance Suite, debe tener una cuenta con privilegios administrativos.

Siga estos pasos para iniciar WPF Performance Suite.

  1. En el menú Inicio, seleccione Todos los programas y, a continuación, Windows Performance Toolkit.

  2. Haga clic en WPF Performance Suite.

  3. Si aparece un cuadro de diálogo Control de cuentas de usuario, haga clic en .

    WPF Performance Suite se inicia.

La primera vez que inicia WPF Performance Suite, aparece el cuadro de diálogo Agregar herramientas. Este cuadro de diálogo permite agregar herramientas de generación de perfiles de rendimiento. Para agregar una herramienta, seleccione un ensamblado que contenga una herramienta y haga clic en Examinar ensamblado. Siempre que quiera abrir el cuadro de diálogo Agregar herramienta, vaya al menú Archivo y haga clic en Agregar herramienta. En la siguiente ilustración se muestra el cuadro de diálogo Agregar herramientas.

Cuadro de diálogo Agregar herramientas

Cuadro de diálogo Agregar herramientas

De forma predeterminada, WPF Performance Suite incluye las siguientes herramientas de generación de perfiles de rendimiento.

Herramienta

Descripción

Perforator

Analiza el comportamiento de la representación.

Visual Profiler

Genera un perfil de uso de los servicios de WPF, tales como el diseño y el control de eventos, mediante elementos del árbol visual.

Asegúrese de que las casillas Perforator y Visual Profiler están seleccionadas y, a continuación, haga clic en Aceptar.

Perforator

Perforator es una herramienta de generación de perfiles de rendimiento que sirve para analizar el comportamiento de representación de la aplicación WPF. La interfaz de usuario de Perforator muestra un conjunto de gráficos que permiten analizar comportamientos muy específicos de la representación en partes de una aplicación, como la tasa de adición de rectángulo sucio y la velocidad de fotogramas. WPF usa una técnica de representación llamada rectángulo sucio (dirty rectangle), que significa que solo las partes de la pantalla que han cambiado se representan en un nuevo pase de representación. Además, Perforator tiene varias opciones que se pueden usar para buscar problemas de representación específicos. Perforator informa también de los destinos de representación de software y tiene un control deslizante para controlar la duración de los gráficos. En la siguiente ilustración se muestra la interfaz de usuario de Perforator.

Interfaz de usuario de Perforator

Cuadro de diálogo Add Tool

Aa969767.collapse_all(es-es,VS.110).gifUsar Perforator

Para usar Perforator, inicie la aplicación WPF que quiera analizar. Una vez que se inicia la aplicación, haga clic en la pestaña Perforator, haga clic en el menú Acciones y, a continuación, haga clic en Seleccionar proceso. En el cuadro de diálogo Seleccionar proceso, seleccione el proceso de aplicación que quiera analizar y, a continuación, haga clic en Seleccionar. El nombre y el identificador del proceso deberían aparecer ahora en la parte superior de la pestaña Perforator. Seleccione las opciones de representación que quiera analizar. Los valores de datos de Perforator, como la velocidad de fotogramas, reflejan inmediatamente el comportamiento de representación de la aplicación. En la siguiente ilustración se muestra un ejemplo.

Perforator con las opciones de aplicación y representación seleccionadas

Ventana principal de Perforator con opciones seleccionadas

Aa969767.collapse_all(es-es,VS.110).gifGráficos de Perforator

Para que una aplicación WPF se represente de manera eficaz, es importante mantener en un nivel bajo la velocidad de fotogramas, la velocidad de adición de rectángulos sucios y el número de destinos de representación intermedios. Perforator dispone de muchos gráficos que resultan útiles para supervisar estos niveles.

En la tabla siguiente se describen las métricas notificadas por cada gráfico.

Gráfico de historial

Descripción

Notas

Velocidad de fotogramas

Informa de la velocidad a la que se está representando la aplicación en la pantalla.

Para las aplicaciones sin animaciones, este valor debe estar próximo al 0. Durante las animaciones de una aplicación que tenga un rendimiento satisfactorio, la velocidad de fotogramas debe estar próxima a la frecuencia de actualización del monitor (normalmente 60 o 75).

Tasa de adición de rectángulos sucios

Indica cuántas regiones rectangulares tiene que actualizar WPF para cada fotograma.

El término rectángulo sucio (dirty rectangle) hace referencia a una técnica de representación según la cual solo se representan las partes de la pantalla que han cambiado. Un valor alto indica que cambian muchas áreas. Esto no es necesariamente ni bueno ni malo, sino un valor que debe tenerse en cuenta para el rendimiento general de la aplicación.

Destinos de representación intermedios (IRT) de software por fotograma

Muestra el número de destinos de representación intermedios de software (IRT) necesario para representar un fotograma de la aplicación.

Los IRT son superficies de software costosas que WPF debe asignar y en las que copia y pega datos. Los IRT de software son más caros que los IRT de hardware.

Los IRT suelen deberse al uso de DrawingBrush, VisualBrush, la propiedad Opacity en Visual, o a los modos de mosaico en TileBrush. Si este número es alto (por ejemplo, mayor que 5), indica que el runtime de WPF está realizando una gran cantidad de trabajo para representar la aplicación.

En un equipo que admita aceleración de hardware, este número debe ser 0. De lo contrario, este número indica que parte de la escena se representa mediante la canalización de software más lenta.

Destinos de representación intermedios (IRT) de hardware por fotograma

Muestra el número de destinos de representación intermedios de hardware (IRT) necesario para representar un fotograma de la aplicación.

Los IRT son superficies de hardware costosas que WPF debe asignar y en las que copia y pega datos.

Los destinos de representación intermedios suelen deberse al uso de DrawingBrush, VisualBrush, la propiedad Opacity en Visual, o a los modos de mosaico en TileBrush. Si este número es alto (por ejemplo, mayor que 5), indica que el runtime de WPF está realizando una gran cantidad de trabajo para representar la aplicación. En este caso, habrá que analizar todas las áreas del código que usan los elementos antes mencionados.

Los IRT de hardware no son tan costosos como los IRT de software.

Uso de la memoria de vídeo

Realiza el seguimiento de grandes asignaciones de memoria de vídeo en WPF para la textura y los destinos de representación. Esta métrica no realiza un seguimiento de las asignaciones de memoria para el controlador de vídeo ni las asignaciones de memoria para compilar y cargar los sombreadores de píxeles y vértices.

Si se supera la cantidad de memoria de textura disponible, normalmente la lógica de representación de WPF recurrirá al software y las presentaciones múltiples (en varios monitores) tendrán un efecto multiplicativo en la cantidad de memoria de vídeo necesaria para una aplicación.

Aa969767.collapse_all(es-es,VS.110).gifOpciones de representación de Perforator y optimización de la representación

Perforator permite establecer muchas opciones de representación que afectan al comportamiento de representación en tiempo real de la aplicación. Si establece estas opciones, podrá ver los eventos de representación que podrían dar problemas en la aplicación. Estas opciones se encuentran en la parte inferior de la interfaz de usuario.

En la siguiente ilustración se muestran las opciones de representación de Perforator.

Opciones de representación de Perforator

Opciones de presentación de Perforator

En general, para mejorar el rendimiento de las aplicaciones WPF, se debe minimizar la representación de software y reducir el número de destinos de representación intermedios. En las siguientes secciones se explica cómo Perforator puede ayudarle a conseguirlo.

Aa969767.collapse_all(es-es,VS.110).gifEvitar la representación de software

Dado que la canalización de representación de hardware de WPF es considerablemente más rápida que la de software, cuanta menos interfaz de usuario de la aplicación se represente en el software, más rápida será la representación en esa aplicación. Normalmente, el tiempo necesario para representar un área en el software es proporcional al número de píxeles representados. Por consiguiente, sea cuidadoso con la representación de áreas extensas mediante la canalización de software. Las áreas pequeñas presentan menos problemas.

En la tabla siguiente se enumeran las opciones de Perforator que pueden ayudar a detectar problemas de representación de software.

Opción

Descripción

Notas

Dibujar con un tono púrpura la representación de software

Dibuja de color púrpura todas las áreas que se representan mediante la canalización de representación de software. Se incluyen los destinos de representación de software, el contenido 3D de software y la reserva de software de primitivas individuales.

La canalización de representación de hardware de WPF es considerablemente más rápida que su canalización de representación de software. Normalmente, si la representación de software es excesiva, es indicativo de un problema. Algunas situaciones que provocarían este comportamiento serían un mosaico excesivo de Brush o superar el tamaño de textura de la tarjeta de vídeo.

Dibujar con un tono rojo los efectos de imagen representados de software

Dibuja los efectos de imagen heredados representados mediante software con tono rojo.

Las clases BitmapEffect representadas por software son lentas y deben evitarse. Use las clases Effect representadas por hardware que se introdujeron en .NET Framework 3.5 SP1.

En la ilustración siguiente se muestra la aplicación de ejemplo PhotoDemo en la que la opción de representación Dibujar con un tono púrpura la representación de software está habilitada.

PhotoDemo con tono púrpura

Aplicación Photodemo mostrando las opciones de representación de Perforator

Aa969767.collapse_all(es-es,VS.110).gifSupervisión de regiones sucias

Puesto que WPF solamente actualiza las partes de una ventana que sea necesario, puede ser útil visualizar las actualizaciones en un momento dado. En algunos casos, y aunque no se produzcan animaciones en la aplicación, las regiones seguirán actualizándose. Las opciones siguientes ayudan a visualizar el comportamiento de las actualizaciones. Las actualizaciones innecesarias son especialmente importantes en escenarios de escritorio remoto, máquinas virtuales y otros escenarios similares cuando WPF debe enviar nuevos mapas de bits a través de la red. Además, las actualizaciones innecesarias pueden afectar a la duración de la batería de los equipos portátiles.

Opción

Descripción

Notas

Mostrar superposición de actualización de región sucia

Hace que las actualizaciones de WPF en pantalla se indiquen volviendo a aplicar color. Esto permite ver cuándo y dónde se vuelven a dibujar las áreas de una aplicación.

Puesto que WPF solo actualiza las partes de la ventana que sea necesario, puede ser útil visualizar la parte de la ventana que se está actualizando en un momento dado. Use esta opción cuando la velocidad de fotogramas y la velocidad de adición de rectángulos sucios no sean cero, pero no se estén produciendo cambios en los elementos visuales de la aplicación.

Deshabilitar compatibilidad de regiones sucias

Hace que WPF vuelva a dibujar toda la ventana cada vez que se realiza un cambio.

Esta opción resulta útil para forzar la actualización de toda la ventana. Normalmente, solo se vuelve a dibujar la parte de la ventana que ha cambiado. Si se habilita esta opción, la aplicación se representa de manera mucho más lenta.

Borrar el búfer de reserva antes de la representación

Borra las ventanas de la aplicación antes de cada operación de dibujo.

Esta opción es una alternativa a Mostrar superposición de actualización de región sucia. Muestra la región sucia más reciente de manera eficaz, mientras que la opción de superposición de actualización de región sucia es más útil para ver los cambios que se producen en la región sucia a lo largo del tiempo.

Aa969767.collapse_all(es-es,VS.110).gifDetectar otros orígenes de degradación del rendimiento

Perforator permite deshabilitar ciertas operaciones que afectan al rendimiento para determinar si están produciendo cuellos de botella en la aplicación. Al supervisar la velocidad de fotogramas de las aplicaciones y seleccionar estas opciones individualmente, se puede determinar si operaciones tales como la representación 3D o el cambio de escala de la imagen están produciendo problemas de representación. Si selecciona una de estas opciones y la velocidad de fotogramas cae significativamente, probablemente habrá identificado el cuello de botella en la aplicación.

Opción

Descripción

Notas

Deshabilitar efectos de opacidad

Deshabilita algunos usos de opacidad que posiblemente reduzcan el rendimiento.

Para evitar este problema de rendimiento en general, puede establecer la opacidad en un objeto de nivel bajo, como Brush, en lugar de un objeto de nivel alto, como Button.

Deshabilitar reserva de software por primitiva

Deshabilita la reserva de software para primitivas de representación individuales. No se pueden deshabilitar los destinos de representación intermedios de software ni otros tipos de representaciones de software.

En la mayoría de los casos, esta opción no es necesaria. Manténgala desactivada.

Deshabilitar cambio de escala de imágenes de alta calidad

Deshabilita la reducción de escala de las imágenes de gran tamaño.

Permite ver qué efecto tiene un cambio de escala de imagen en la aplicación. Si al activar esta opción se reduce significativamente la velocidad de fotogramas, tiene la opción de descodificar las imágenes a un tamaño que se aproxime al tamaño en que se mostrarán.

Deshabilitar la representación en 3D

Deshabilita todas las operaciones de representación en 3D.

Permite ver qué efecto tienen las operaciones de representación 3D en la aplicación.

Visual Profiler

Visual Profiler es una herramienta de generación de perfiles de rendimiento de los servicios de WPF, tales como el diseño, la representación y la animación, para los elementos del árbol visual. Mediante el análisis de los resultados de generación de perfiles de esta herramienta, se puede determinar qué elementos visuales de la aplicación pueden estar originando cuellos de botella de rendimiento.

Visual Profiler muestra los problemas de rendimiento en el contexto de los bloques de creación básicos que se usan para construir escenas visuales en la aplicación. Estos bloques de creación son objetos de alto nivel, como los controles Button y TextBlock, además de los objetos de bajo nivel, como los elementos Line y Ellipse. En lugar de describir los problemas de rendimiento en términos de gráficos de llamadas de nombres de funciones, Visual Profiler describe estos problemas mediante la representación de los objetos visuales. Esto se parece a la forma en que la herramienta de Windows SDK, UI Spy, representa la información. Para obtener más información, vea UISpy.exe (UI Spy).

Aa969767.collapse_all(es-es,VS.110).gifUsar Visual Profiler

Para usar Visual Profiler, inicie la aplicación WPF que quiera analizar. Una vez que se inicia la aplicación, haga clic en la pestaña Visual Profiler, haga clic en el menú Acciones y, a continuación, haga clic en Seleccionar proceso. En el cuadro de diálogo Seleccionar proceso, seleccione el proceso de aplicación que quiera analizar y, a continuación, haga clic en Seleccionar. El nombre y el identificador del proceso deberían aparecer ahora en la parte superior de la pestaña Visual Profiler.

Para analizar en su conjunto los problemas de rendimiento de WPF, es preciso entender el rol y el ámbito de los servicios de WPF subyacentes. Estos servicios incluyen el diseño, la representación y la animación. Visual Profiler proporciona una representación gráfica de la asignación de los servicios de WPF entre los objetos de la aplicación. Por ejemplo, cuando Visual Profiler muestra el árbol visual de los objetos de la aplicación, se superponen diferentes sombras de rojo en los objetos para representar la cantidad relativa de recursos que usa el objeto. Un objeto que se muestra con una capa roja más oscura representa un objeto que usa una mayor proporción de recursos que un objeto con una capa roja más clara. Más importante aún, Visual Profiler proporciona un desglose de la cantidad de recursos de WPF específicos que usa un objeto.

En la siguiente ilustración se muestra la interfaz de usuario de Visual Profiler.

Interfaz de usuario de Visual Profiler

Interfaz de usuario del generador de perfiles de Visual

La interfaz de usuario de Visual Profiler tiene ocho áreas.

  1. Cuadro de búsqueda del árbol de elementos

  2. Árbol de elementos visuales

  3. Detalles y vista previa de elementos

  4. Detalles de uso de CPU exclusivos del elemento

  5. Detalles de uso de CPU de la aplicación

  6. Control de zoom de los datos capturados

  7. Configuración de pantalla del gráfico de historial

  8. Opciones para la vista previa de la aplicación y de superposición del rendimiento

En las secciones siguientes se describe cada área.

Aa969767.collapse_all(es-es,VS.110).gifCuadro de búsqueda del árbol de elementos

El cuadro de la búsqueda de la sección Árbol de elementos proporciona la posibilidad de buscar elementos en el árbol de elementos de la aplicación. Cuando se realiza una búsqueda, todos los elementos coincidentes se resaltan en amarillo. Los elementos se pueden buscar por tipo o nombre.

Aa969767.collapse_all(es-es,VS.110).gifÁrbol de elementos visuales

El control de árbol de la sección Árbol de elementos muestra el tipo y el nombre de los elementos visuales de la aplicación junto con los detalles de tamaño y diseño del subárbol.

A continuación se muestra un ejemplo de una etiqueta de elemento del árbol.

Borde 'border1' (26) 0,02% (I)/ 0,00 % (E) - .24 ms (I) / 0,00 ms (E)

Parte de la etiqueta de elemento

Descripción

Borde

Tipo del elemento.

'border1'

Nombre del elemento.

(26)

Tamaño del subárbol.

0,02% (I)

Porcentaje del tamaño total del árbol, es decir, el elemento y todos sus descendientes.

0,00 (E)

Porcentaje de elementos totales únicamente para el elemento.

.24 ms (I)

Tiempo en milisegundos para diseñar el elemento y sus descendientes.

0,00 ms (E)

Tiempo en milisegundos para diseñar únicamente el elemento.

Use el menú Ver para controlar si se debe mostrar la información de tiempo o porcentaje de inclusión/exclusión.

Haga clic con el botón derecho en un elemento para expandir o contraer el subárbol. También puede expandir su ruta de acceso activa. La ruta de acceso activa muestra el elemento del subárbol que consume más CPU en ese subárbol.

Aa969767.collapse_all(es-es,VS.110).gifDetalles y vista previa de elementos

La sección Información de elemento muestra el tipo y el nombre del elemento seleccionado actualmente (en caso de que el elemento tenga un nombre). También proporciona una vista previa del elemento en la sección Vista previa. Si se selecciona el elemento de nivel superior, se muestra una vista previa de la aplicación.

Aa969767.collapse_all(es-es,VS.110).gifDetalles de uso exclusivo de CPU del elemento

La sección Uso exclusivo de CPU del elemento muestra un gráfico de historial y los detalles de tiempo de CPU consumido a lo largo del tiempo por el elemento seleccionado. Por ejemplo, un elemento puede usar un x% de tiempo de CPU en la organización del diseño, un y% en la medición del diseño y un z% en la representación.

Aa969767.collapse_all(es-es,VS.110).gifDetalles de uso de CPU de la aplicación

La sección Uso de CPU de la aplicación muestra un gráfico de historial y los detalles de los eventos de aplicación. Visual Profiler escucha y captura diversos eventos de aplicación. Los eventos de aplicación se muestran con valores absolutos, y el gráfico de historial muestra con diferentes colores el tiempo de CPU que se invierte en cada evento de aplicación a lo largo del tiempo. Esto le permite ver con facilidad el tiempo que la aplicación invierte en el diseño frente a la representación.

En la tabla siguiente se describen los eventos de aplicación representados en el gráfico.

Nota

Los eventos que corresponden a llamadas a métodos en WPF se representan con el nombre del método seguido del nombre de la clase entre paréntesis.Por ejemplo, Tick (TimeManager) representa el método TimeManager.Tick.

Eventos de aplicación

Descripción

Hora sin etiqueta

Tiempo invertido en WPF que no está clasificado en ningún otro evento de aplicación; todo el tiempo usado por la aplicación fuera de WPF.

RenderMessageHandler (MediaContext)

Se produce cuando se inicia la fase de representación. Este evento genera una marca del administrador de tiempo, entre otras cosas.

Subproceso de representación

Se produce al ejecutar las instrucciones de representación en el subproceso de representación. Es útil para detectar aplicaciones enlazadas a representaciones.

Diseño

Se produce durante la fase de medición, organización y representación.

UpdateRealizations

Se produce al actualizar las representaciones de mapa de bits internas de efectos de texto e imagen.

Tick (TimeManager)

Se produce cuando la animación está realizando marcas de graduación. Este evento puede desencadenar el controlador de representación de animación.

Al animar objetos en WPF, un administrador de tiempo administra los objetos Clock que se crearon para las escalas de tiempo. El administrador de tiempo es la raíz de un árbol de objetos Clock y controla el flujo de tiempo en ese árbol. El administrador de tiempo se crea automáticamente para cada aplicación WPF y no es visible para el programador de aplicaciones. El administrador de tiempo genera muchas “marcas de graduación” por segundo. El número real de marcas que se producen por segundo varía en función de los recursos disponibles en el sistema.

AnimatedRenderMessageHandler (MediaContext)

Se produce para el procesamiento y las actualizaciones de animaciones. Cuando se habilitan las animaciones, este controlador procesa y actualiza la animación, que hace que las propiedades cambien y se produzca la representación.

Render (MediaContext)

Se produce durante la fase de representación. Este método llama finalmente al método OnRender de cada elemento y es útil para comprender el costo total de OnRender en todos los elementos. Este evento se corresponde con el método MediaContext.Render en un archivo de Visual Studio Profiler (VSP).

Aa969767.collapse_all(es-es,VS.110).gifControl de zoom de los datos capturados

La sección Opciones del gráfico incluye un control de zoom de los datos capturados. Arrastre los controladores de la ventana del zoom para cambiar el tamaño y el eje de tiempo de los gráficos de historial Uso exclusivo de CPU del elemento y Uso de CPU de la aplicación.

Aa969767.collapse_all(es-es,VS.110).gifConfiguración de pantalla del gráfico de historial

La sección Opciones del gráfico incluye botones de opción y un control deslizante para ajustar la configuración del gráfico de historial. Use los botones de radio para especificar cómo se comporta el eje de la CPU (el eje vertical) y ver si muestra ponderaciones absolutas o relativas. Use el control deslizante para establecer un valor máximo mostrado para el gráfico.

Aa969767.collapse_all(es-es,VS.110).gifOpciones para la vista previa de la aplicación y de superposición del rendimiento

La sección Opciones de control contiene tres botones de alternancia que realizan las acciones siguientes.

  • Haga clic en el primer botón de alternancia para poner en pausa o iniciar la recopilación de datos de Visual Profiler.

  • Haga clic en el botón de alternancia Vista previa dinámica para mostrar una vista previa dinámica de la aplicación en la sección Vista previa.

  • Haga clic en el botón de alternancia Ventana superpuesta para agregar un borde amarillo al elemento visual seleccionado. Además, para los elementos que consumen más tiempo de CPU, se agrega una capa de color rojo. Ese mismo color rojo se usa para el elemento de la sección Árbol de elementos. La intensidad del color rojo es correlativa al uso de CPU.

Vea también

Conceptos

UISpy.exe (UI Spy)

Otros recursos

Optimizar WPF: Rendimiento de aplicaciones

Niveles de representación de gráficos

Información general sobre la representación de gráficos en WPF

Novedades de las herramientas de generación de perfiles de WPF