Analizar datos de rendimiento de código de Visual C++, Visual C# y Visual Basic en aplicaciones de la Tienda Windows

En este tema se describen los datos de rendimiento del código de Visual C++, Visual C# y Visual Basic que se muestra en las vistas de informes de la herramienta de generación de perfiles de Microsoft Visual Studio Express 2012 para Windows 8. Para recopilar datos de rendimiento de Visual C++, Visual C# y Visual Basic, vea uno de estos temas:

En este tema

Este tema contiene las siguientes secciones:

Abrir el archivo de informe de generación de perfiles

Tipos de datos de rendimiento

Solo mi código

Tipos de vistas de informes de rendimiento

Vistas de informes de rendimiento

  • Vista Resumen

  • Vista Detalles de la función

  • Vista Árbol de llamadas

  • Vista Llamador y destinatario

  • Vistas Módulos y Funciones

  • Vista Líneas

Personalizar vistas de cuadrícula de datos

Abrir el archivo de informe de generación de perfiles

Cuando detienes una ejecución de generación de perfiles desde el IDE de Visual Studio, los datos de rendimiento aparecen automáticamente en un documento.

Para abrir un archivo de informe de generación de perfiles (.vspx) que se ha generado desde la herramienta de línea de comandos VSPerf o que se ha guardado después de una ejecución de generación de perfiles anterior, sigue este procedimiento:

  1. Si es necesario, abre Visual Studio.

  2. En el menú Archivo, elige Abrir archivo.

  3. En el cuadro de diálogo Abrir archivo, navega hasta la carpeta que contiene el archivo de informe de generación de perfiles y elige el archivo de informe.

Tipos de datos de rendimiento

El generador de perfiles de Visual Studio Express 2012 para Windows 8 utiliza una técnica de muestreo para recopilar datos de rendimiento del código de Visual C++, Visual C# y Visual Basic. En un intervalo basado en el reloj de procesador, el generador de perfiles captura una instantánea de las funciones que están activas, la pila de llamadas. Una función activa en la pila de llamadas está ejecutando su propio código o bien esperando a que se ejecuten otras funciones a las que ha llamado. Para cada función de la pila de llamadas muestreada, el generador de perfiles asigna valores de muestreo a la función, así:

  • Si la función está ejecutando código en su propio cuerpo (y no en una función secundaria), se incrementan los recuentos de muestras inclusivas y exclusivas de la función.

  • Si la función está esperando a una función secundaria para volver, solo se incrementa el recuento de muestras inclusivas de la función.

Los datos de generación de perfiles de una función incluyen el número absoluto de muestras recopiladas para la función y el porcentaje relativo de esos ejemplos en comparación con el número total de muestras recopiladas en la ejecución de generación de perfiles. Los datos se calculan para dos conjuntos de valores de tiempo:

  • Los valores inclusivos se calculan a partir del número total de muestras recopiladas para una función mientras está en la pila de llamadas, incluidas las recopiladas mientras se ejecutan las funciones secundarias. Cuando se analiza una pila de llamadas muestreada, se incrementan los recuentos de muestras inclusivas de todas las funciones de la pila de llamadas.

  • Los valores exclusivos se calculan a partir del número total de muestras recopiladas para una función mientras ejecuta su propio código. Los valores exclusivos no incluyen las muestras recopiladas mientras se ejecuta la función secundaria. Cuando se analiza una pila de llamadas muestreada, el recuento de muestras exclusivas únicamente se incrementa para la función que está ejecutando código en el cuerpo de la función.

Tipos de vistas de informes de rendimiento

Las vistas de los informes de generación de perfiles muestran los datos de dos maneras:

  • Las vistas de gráfico de llamadas muestran información sobre las funciones en el contexto de las rutas de acceso de ejecución.

    • El árbol de Ruta de acceso activa de la ventana Resumen muestra la ruta de acceso de la ejecución de generación de perfiles para la cual la mayoría de las muestras tardaron más tiempo.

    • La vista Árbol de llamadas es un gráfico de llamadas para todas las rutas de acceso de ejecución muestreadas en la ejecución de generación de perfiles.

    • Las vistas Detalles de la función y Llamador y destinatario se centran en la función seleccionada. Muestran las funciones que la llamaron y aquellas a las que esta llamó.

    Las vistas de gráfico de llamadas ayudan a detectar problemas de rendimiento en los algoritmos.

  • Las vistas de lista de funciones muestran los datos de rendimiento para las funciones de una tabla. Puedes ordenar las funciones eligiendo una columna de datos.

    • La lista Funciones con la mayor parte del trabajo individual de la página Resumen muestra las funciones con el mayor número de muestras exclusivas recopiladas durante la ejecución de generación de perfiles.

    • La vista Módulos agrupa las funciones según el archivo .dll o .exe que las contiene.

    • La vista Funciones es una sola lista de funciones.

    • La vista Líneas muestra los datos de rendimiento de las instrucciones de la función que se estaban ejecutando al recopilar una muestra.

Para navegar entre las vistas, selecciona una función y elige otra vista en la lista desplegable Vista actual.

Solo mi código

De forma predeterminada, el generador de perfiles usa la funcionalidad Solo mi código al crear informes. Cuando el generador de perfiles analiza la información de la pila de llamadas, determina si una función contenida en ella pertenece a tu código o al código del sistema (como un método de la biblioteca de clases base de .NET). Si se ha habilitado Solo mi código y la función es una llamada al código del sistema, el análisis del generador de perfiles agrega todas las muestras siguientes recopiladas de la pila de llamadas a los valores exclusivos e inclusivos de la primera llamada al sistema. De esta forma, las llamadas del sistema se consolidan en la primera de ellas, lo que te ayuda a concentrarte en optimizar tu propio código.

Para cambiar el comportamiento predeterminado de Solo mi código y ver todas las llamadas del sistema, sigue este procedimiento:

  1. Elige Opciones en el menú Herramientas.

  2. En el cuadro de diálogo Opciones, elige Herramientas de rendimiento y, luego, General.

  3. En el grupo Solo mi código, desactiva la casilla Habilitar Solo mi código en informes del generador de perfiles (muestreo).

Vistas de informes de rendimiento

Hh780914.collapse_all(es-es,VS.140).gifVista Resumen

La página Resumen proporciona dos vistas de los datos de generación de perfiles que, a menudo, te indicarán cuáles son los mejores candidatos para optimizar su rendimiento.

  • El árbol Ruta de acceso activa muestra la pila de llamadas con más muestras en la ejecución de generación de perfiles. Entender el motivo por el cual este algoritmo tarda tanto puede ayudarte a optimizarlo.

  • La lista Funciones con la mayor parte del trabajo individual presenta las diez funciones que han utilizado más tiempo exclusivo. Puedes mejorar mucho el rendimiento rápidamente optimizando el código de la función o reduciendo cuántas veces se la llama.

Para abrir una vista Detalles de la función, elige el nombre de la función en la vista Resumen.

Hh780914.collapse_all(es-es,VS.140).gifVista Detalles de la función

El gráfico de barras Distribución del costo representa las relaciones entre la función seleccionada y las funciones de llamada que la han ejecutado. También indica las relaciones entre la función seleccionada y aquellas a las que llamó.

  • La barra Funciones de llamada muestra las funciones que llamaron a la función seleccionada. El tamaño del bloque de la función de llamada indica el porcentaje de tiempo de ejecución total de la función seleccionada que es atribuible a la función de llamada.

  • La barra Función seleccionada indica la cantidad relativa del tiempo de ejecución total que la función seleccionada dedicó a ejecutar su propio código (el bloque Cuerpo de función) y el que dedicó a ejecutar las funciones a las que llamó.

  • La barra Funciones llamadas muestra las funciones a las que llamó la función seleccionada. El tamaño del bloque de la función llamada indica el porcentaje del tiempo de ejecución total de esta función que se dedicó a ella.

Puedes elegir una función que llama o a la que se llama para que sea la seleccionada.

Hh780914.collapse_all(es-es,VS.140).gifVista Árbol de llamadas

Puedes usar la vista Árbol de llamadas para explorar las rutas de acceso de ejecución de funciones que se recorrieron en la aplicación. La raíz del árbol es el punto de entrada a la aplicación. Cada nodo de función muestra todas las funciones a las que llamó, así como los datos de rendimiento de esas llamadas a funciones. Los valores de las funciones en la vista Árbol de llamadas se refieren a las instancias de la función a las que llamó la función primaria en el árbol de llamadas. Los valores de porcentaje son la proporción del tiempo del valor de las instancias de la función respecto al tiempo total transcurrido en la ejecución de generación de perfiles.

Para centrarte en un nodo de la vista Árbol de llamadas, selecciónalo y elige Establecer raíz en el menú contextual. Al establecer el nodo raíz, se eliminan todas las demás entradas de la vista, excepto el subárbol del nodo seleccionado. Para restablecer el nodo raíz en el nodo original, elige Restablecer raíz en el menú contextual.

Columnas de la vista Árbol de llamadas

Nombre de columna

Descripción

Muestras inclusivas

Número de muestras que se recopilaron para las instancias de la función a las que llamó la función primaria en el árbol de llamadas. El número de muestras incluye aquellas recopiladas para las funciones a las que llamó la función.

Muestras exclusivas

Número de muestras que se recopilaron para las instancias de la función a las que llamó la función primaria en el árbol de llamadas. Número de muestras no incluye aquellas recopiladas para las funciones a las que llamó la función.

Porcentaje de muestras inclusivas

Porcentaje del número total de muestras recopiladas en la ejecución de generación de perfiles que se han obtenido para las instancias de la función a las que llamó la función primaria. El valor incluye aquellas muestras recopiladas para las funciones a las que llamó la función.

Porcentaje de muestras exclusivas

Porcentaje del número total de muestras recopiladas en la ejecución de generación de perfiles que se han obtenido para las instancias de la función a las que llamó la función primaria. El valor no incluye aquellas muestras recopiladas para las funciones a las que llamó la función.

Nombre del módulo

Nombre del módulo (.dll o .exe) que contiene la función.

Hh780914.collapse_all(es-es,VS.140).gifVista Llamador y destinatario

La vista Llamador y destinatario es una representación de árbol de los datos del gráfico de barras Distribución del costo de Detalles de la función que incluye todos los detalles de tiempo. La vista Llamador y destinatario es útil para investigar la relación entre la función seleccionada y aquellas que la llamaron o a las que esta llamó. La vista Llamador y destinatario se compone de tres cuadrículas.

La Función actual que aparece en la cuadrícula central muestra información de generación de perfiles acerca de la función seleccionada. Los valores incluyen muestras de todas las llamadas a la función. Las Funciones que llamaron a la función actual aparecen en la cuadrícula superior y las Funciones llamadas por la función actual, en la inferior. Los valores de la función actual son los totales de todas las llamadas a la función muestreadas. Los valores de las funciones que llaman y a las que se llama solo incluyen las muestras recopiladas para esa función cuando llamaba a la función seleccionada o esta última la llamaba a ella.

Para navegar por los árboles de llamadas de una función, haz doble clic en una función que llama o a la que se llama. Esta será la nueva función seleccionada y podrás ver sus llamadores y las funciones a las que se llama.

Columnas de la vista Llamador y destinatario

Nombre de columna

Descripción

Muestras inclusivas

  • Número total de muestras recopiladas para la función seleccionada. El valor incluye aquellas muestras recopiladas para las funciones a las que llamó la función seleccionada.

  • Para una función de llamada, este valor es el número de muestras recopiladas en la ejecución de generación de perfiles para las instancias de la función que llamó la función seleccionada. El valor incluye aquellas muestras recopiladas para las funciones a las que llamó la función de llamada.

  • Para una función a la que se llama, este valor es el número de muestras recopiladas en la ejecución de generación de perfiles para las instancias de dicha función a las que llamó la función seleccionada. El valor incluye aquellas muestras recopiladas para las funciones a las que llamó la propia función llamada.

Muestras exclusivas

  • Número total de muestras recopiladas para la función seleccionada. El valor no incluye aquellas muestras recopiladas para las funciones a las que llamó la función seleccionada.

  • Para una función de llamada, este valor es el número de muestras recopiladas en la ejecución de generación de perfiles para las instancias de la función que llamó la función seleccionada. El valor no incluye aquellas muestras recopiladas para las funciones a las que llamó la función de llamada.

  • Para una función a la que se llama, este valor es el número de muestras recopiladas en la ejecución de generación de perfiles para las instancias de dicha función a las que llamó la función seleccionada. El valor no incluye aquellas muestras recopiladas para las funciones a las que llamó la función llamada.

Porcentaje de muestras inclusivas

  • Para la función seleccionada, porcentaje del número total de muestras para la función seleccionada recopiladas en la ejecución de generación de perfiles. El valor incluye aquellas muestras recopiladas para las funciones a las que llamó la función seleccionada.

  • Para una función de llamada, este valor es el porcentaje del número de muestras recopiladas en la ejecución de generación de perfiles para las instancias de dicha función que llamaron a la función seleccionada. El valor incluye aquellas muestras recopiladas para las funciones a las que llamó la función de llamada.

  • Para una función a la que se llama, este valor es el porcentaje del número de muestras recopiladas en la ejecución de generación de perfiles para las instancias de dicha función a las que llamó la función seleccionada. El valor incluye aquellas muestras recopiladas para las funciones a las que llamó la propia función llamada.

Porcentaje de muestras exclusivas

  • Para la función seleccionada, porcentaje del número total de muestras para la función seleccionada recopiladas en la ejecución de generación de perfiles. El valor no incluye aquellas muestras recopiladas para las funciones a las que llamó la función seleccionada.

  • Para una función de llamada, este valor es el porcentaje del número de muestras recopiladas en la ejecución de generación de perfiles para las instancias de dicha función que llamaron a la función seleccionada. El valor no incluye aquellas muestras recopiladas para las funciones a las que llamó la función de llamada.

  • Para una función a la que se llama, este valor es el porcentaje del número de muestras recopiladas en la ejecución de generación de perfiles para las instancias de dicha función a las que llamó la función seleccionada. El valor no incluye aquellas muestras recopiladas para las funciones a las que llamó la función llamada.

Hh780914.collapse_all(es-es,VS.140).gifVistas Módulos y Funciones

Las vistas Módulos y Funciones muestran los detalles de los datos de generación de perfiles de las funciones del informe de generación de perfiles. La vista Módulos organiza las funciones de JavaScript según el archivo de origen .js que las contiene. Las demás funciones se enumeran según su módulo, como un archivo .dll. La vista Función enumera todas las funciones sin utilizar ninguna jerarquía. Suele resultar más fácil encontrar tu propio código en la vista Módulos que en la vista Funciones. Sin embargo, en esta última te será más fácil comparar funciones.

Columnas de las vistas Módulos y Funciones

Nombre de columna

Descripción

Muestras inclusivas

Número de muestras recopiladas cuando la función estaba en la pila de llamadas. El número de muestras incluye aquellas recopiladas para las funciones a las que llamó la función.

Muestras exclusivas

Número de muestras recopiladas cuando la función estaba ejecutando su propio código. Entre las muestras exclusivas no se incluyen las muestras recopiladas mientras se ejecutaban funciones a las que llamó la función.

Porcentaje de muestras inclusivas

Porcentaje del número total de muestras recopiladas en la ejecución de generación de perfiles mientras la función estaba en la pila de llamadas.

El numerador es el valor de Muestras inclusivas de la función.

El denominador es el número total de muestras recopiladas para la ejecución de generación de perfiles.

Porcentaje de muestras exclusivas

Porcentaje del número total de muestras recopiladas para la función en la ejecución de generación de perfiles. El valor no incluye aquellas muestras recopiladas para las funciones a las que llamó la función.

Hh780914.collapse_all(es-es,VS.140).gifVista Líneas

La vista Líneas de datos de muestreo muestra los datos de rendimiento de las instrucciones que se estaban ejecutando cuando se recopilaron las muestras en la ejecución de generación de perfiles. En un archivo de origen, una instrucción puede abarcar más de una línea y una sola línea puede incluir más de una instrucción.

Nombre de columna

Descripción

Muestras inclusivas

Número de muestras recopiladas para la línea en la ejecución de generación de perfiles. El número de muestras incluye aquellas recopiladas para las funciones a las que llamó la línea.

Muestras exclusivas

Número de muestras recopiladas para la línea en la ejecución de generación de perfiles. El número de muestras no incluye aquellas recopiladas para las funciones a las que llamó la línea.

Porcentaje de muestras inclusivas

Porcentaje del número total de muestras recopiladas para la línea en la ejecución de generación de perfiles. El valor incluye aquellas muestras recopiladas para las funciones a las que llamó la línea.

Porcentaje de muestras exclusivas

Porcentaje del número total de muestras recopiladas para la línea en la ejecución de generación de perfiles. El valor no incluye aquellas muestras recopiladas para las funciones a las que llamó la línea.

Línea de inicio en el código fuente

Número de línea inicial en el archivo de origen donde se recopiló esta muestra.

Carácter de inicio en el código fuente

Desplazamiento del carácter de inicio en la línea del archivo de origen donde se recopiló esta muestra.

Línea de finalización en el código fuente

Número de la línea de finalización del archivo de origen donde se recopiló esta muestra.

Carácter de finalización en el código fuente

Desplazamiento del carácter final en la línea del archivo de origen donde se recopiló esta muestra.

Personalizar vistas de cuadrícula de datos

Puedes agregar o quitar columnas de datos y cambiar el orden en que se muestran. Abre el menú contextual de la fila de encabezado de una tabla y elige Agregar o quitar columnas. Activa las casillas de las columnas que deseas ver y desactiva las de aquellas que deseas ocultar. Utiliza los botones de flecha para mover la columna seleccionada.

Columnas de datos de generación de perfiles adicionales

Nombre de columna

Descripción

Dirección de la función

Dirección de memoria de la función.

Número de línea de función

Número de línea del inicio de esta función en el archivo de origen.

Archivo de código fuente

Archivo de origen que contiene la definición de esta función.

Nombre del módulo

Nombre del módulo que contiene la función.

Ruta de acceso del módulo

Ruta de acceso del módulo que contiene la función.

Id. de proceso

Identificador de proceso (PID) de la ejecución de generación de perfiles.

Nombre del proceso

Nombre del proceso.