domingo, 2 de septiembre de 2012

El nuevo SDK para el visualizador de concurrencia en VS2012

 

El visualizador de concurrencia muestra información importante tanto de la CPU, como de la GPU y recursos importantes como la actividad de DirectX, dispositivos de I/O y de los procesos que se ejecutan entre otros. el visualizador muestra el promedio de utilización de núcleo del proceso. Los procesos libres, los procesos del sistema y otros procesos que son ejecutados en tiempo del sistema.

Por ejemplo si dos núcleos están ocupando en un 50% de su capacidad en un periodo de tiempo determinado, entonces esta vista muestra el procesador lógico que está siendo utilizado.

Esta información puede ser muy valiosa en la investigación de comportamiento de una aplicación, pero a veces es difícil de entender rápidamente cómo los datos que se muestran en los mapas visualizador de concurrencia en el comportamiento de la aplicación. Visual Studio 2012 trae consigo un SDK que permite instrumentar el código con el fin de aumentar las visualizaciones mostradas en la vista Hilos de las visualizador de concurrencia. Estas visualizaciones, denominados marcadores “Marker”, hace que la vista de hilos sea semánticamente entendible porque representan las fases y eventos específicos de la aplicación.

Y después de tanta teoría comencemos con lo interesante, usarlo !!! , miremos donde ubicarlo en el IDE de Visual Studio.

 

clip_image002

En el menú de herramientas en análisis, visualizador de concurrencia

El SDK contiene tres opciones visuales , las cuales son:

1.Span: Representa un intervalo de tiempo en la aplicación. Como lo es una fase de la aplicación.

2. Flag: Representa un único punto en el tiempo ( por ejemplo cuando se llega a un valor predeterminado o cuando ocurre una excepción).

3.Message: Representa un único punto en el tiempo, pero se entiendo como un análogo al clásico evento de estilo trazado.

Para cada una de estas tres opciones generaremos un ejemplo sobre ellas, aunque lo hare con ejemplos básicos para poderlo trabajar.

Vamos a crear un pequeño proyecto con dos métodos, los cuales cada una realizara un ciclo de 1 a 10000, y el otro de 100000 a 20000 con esto comenzaremos a que la aplicación se presentaría de la siguiente manera:

class Program

{

static void Main(string[] args)

{

Metodo1();

Console.WriteLine("Terminado Metodo 1");

Metodo2();

Console.WriteLine("Terminado Metodo 2");

}

private static void Metodo2()

{

for (int i = 0; i < 100; i++)

{

Console.WriteLine(i);

}

}

private static void Metodo1()

{

for (int i = 10000; i < 200; i++)

{

Console.WriteLine(i);

}

}

}

Fijémonos que el código se ejecuta de forma secuencial y se presenta de la siguiente manera:

clip_image004

Ahora vamos a iniciar la depuración con el visualizador de concurrencia de tal formas que realizamos lo siguiente:

clip_image006

Al dar click en iniciar con el actual proyecto, el ejecutable se iniciar realiza la ejecución de cada uno de los métodos de forma secuencial. Y al terminar nos presentara una gráfica como la siguiente:

clip_image008

clip_image010

Utilizando el SDK en el proyecto:

Para comenzar es necesario adición el SDK al proyecto, esto se realizar de la siguiente manera, vamos a al menú de herramientas, opción analizar, luego Visualizador de concurrencia, adicionar el SDK al proyecto.

clip_image012

Aparecera una ventana en donde le preguntara que proyectos de la solución desea adicionar al visualizador de concurrencia, en el caso que el proyectos tenga varios proyectos estos aparecerán en la lista a seleccionar ( ver Grafica).


clip_image016clip_image014

Luego de seleccionar el proyecto , se presiona el botón adicionar sdk al proyecto y aparecerá una nuevamente confirmando que el SDK fue adicionado al proyecto seleccionado, y lo podemos validar al verificar las referencias del proyectos en donde aparecerá una nueva referencia llamada Microsoft.ConcurrencyVisualizer.Markers y luego se da click en el botón Cerrar.

clip_image020 clip_image018

Despues de esto se debe adicionar el espacio de nombres en el código fuente como aparece a continuación:

using System;

using System.Threading.Tasks;

using Microsoft.ConcurrencyVisualizer.Instrumentation;

namespace ConsoleApplicationConcurrent

{

Comencemos ahora las opciones de visualización que trae el SDK de visualización de concurrencia.

clip_image022

En el siguiente articulo comenzaremos con la utilización de alguno de estas nuevas funcionalidades tales como Span, Marker, Message.

No hay comentarios:

Publicar un comentario