Cómo trabajar con contadores de rendimiento en C #

Windows controla los procesos y servicios que se ejecutan en su sistema mediante el seguimiento de los subprocesos que se encuentran actualmente en ejecución, la memoria CLR, etc. A menudo, necesitará medir el rendimiento de los sistemas informáticos o las aplicaciones que se ejecutan en ellos según a métricas como el consumo de recursos en el sistema, los servicios que se ejecutan en el sistema o el rendimiento de los dispositivos conectados al sistema.

Los contadores de rendimiento (una función que se proporciona de forma predeterminada) nos permiten capturar, publicar y analizar los datos de rendimiento relacionados con una o más aplicaciones o servicios que se ejecutan en el sistema o el sistema en su conjunto.

Mientras crea aplicaciones, a menudo es posible que deba monitorear su rendimiento (consumo de recursos o uso durante un período de tiempo) y usar los datos de rendimiento para identificar los cuellos de botella en la aplicación. Aquí es donde los contadores de rendimiento son útiles. También puede usar WMI (Instrumental de administración de Windows), una tecnología de Microsoft basada en COM, para recuperar estos detalles, pero los contadores de rendimiento le brindan una manera de obtener las estadísticas en tiempo real del consumo de recursos en su sistema en tiempo de ejecución.

El complemento Monitor de rendimiento (una herramienta que se proporciona de forma predeterminada en el sistema operativo Windows) se puede utilizar para ver los datos de rendimiento en tiempo real. Para iniciar esta herramienta, haga clic en el menú Inicio y haga clic en "Ejecutar". A continuación, escriba "perfmon" y presione enter.

Contadores de rendimiento personalizados

Crear contadores de rendimiento personalizados es sencillo. Puede crear contadores de rendimiento con el Explorador de servidores. Primero deberá crear la categoría de contador de rendimiento y luego crear uno o más contadores como parte de esa categoría.

Para trabajar con contadores de rendimiento mediante programación, puede usar la clase System.Diagnostics.PerformanceCounter. Debería crear una instancia de la clase PerformanceCounter y luego especificar los valores necesarios para cada una de estas propiedades: CategoryName, CounterName, MachineName y ReadOnly.

Para crear una categoría de contador de rendimiento personalizada, necesitaría aprovechar el método Create de la clase PerformanceCounterCategory. Como ejemplo, el siguiente fragmento de código se puede utilizar para crear una categoría de contador de rendimiento personalizada.

PerformanceCounterCategory.Create("CustomPerformanceCounterCategoryName", "CustomPerformanceCounterHelp", PerformanceCounterCategoryType.MultiInstance,

"CustomPerformanceCounterName", "CustomPerformanceCounterHelp");

El siguiente fragmento de código muestra cómo puede mostrar todas las categorías de contador de rendimiento disponibles.

static void Main()

    {

        var performanceCounterCategories = PerformanceCounterCategory.GetCategories();

        foreach(PerformanceCounterCategory performanceCounterCategory in performanceCounterCategories)

        {

         Console.WriteLine(performanceCounterCategory.CategoryName);

        }

        Console.Read();

    }

El siguiente fragmento de código ilustra cómo puede recuperar los contadores de rendimiento que pertenecen a la categoría "Procesador".

var performanceCounterCategories = PerformanceCounterCategory.GetCategories()

     .FirstOrDefault(category => category.CategoryName == "Processor");

var performanceCounters = performanceCounterCategories.GetCounters("_Total");

Necesita usar la clase PerformanceCounter para leer un contador de rendimiento que pertenece a una categoría en particular. Tenga en cuenta que la clase PerformanceCounter está disponible en el espacio de nombres System.Diagnostics. Aquí está la lista completa de códigos que muestra cómo puede mostrar los nombres de los contadores de rendimiento de todos los contadores de rendimiento que pertenecen a la categoría "Procesador".

static void Main()

    {

        var performanceCounterCategories = PerformanceCounterCategory.GetCategories()

            .FirstOrDefault(category => category.CategoryName == "Processor");

        var performanceCounters = performanceCounterCategories.GetCounters("_Total");

        Console.WriteLine("Displaying performance counters for Processor category:--\n");

        foreach (PerformanceCounter performanceCounter in performanceCounters)

        {

            Console.WriteLine(performanceCounter.CounterName);

        }

        Console.Read();

    }

También puede crear su contador de rendimiento personalizado y escribir datos en ellos. Para hacer esto, debe aprovechar las clases CounterCreationDataCollection y CounterCreationData.

String customCategory = "Custom Performance Counter Category";

if (!PerformanceCounterCategory.Exists(customCategory))

{

CounterCreationDataCollection counterCreationDataCollection = new CounterCreationDataCollection();

counterCreationDataCollection.Add(new CounterCreationData("Counter 1", "Sample Counter 1", PerformanceCounterType.ElapsedTime));

counterCreationDataCollection.Add(new CounterCreationData("Counter 2", "Sample Counter 2", PerformanceCounterType.SampleCounter));

counterCreationDataCollection.Add(new CounterCreationData("Counter 3", "Sample Counter 3", PerformanceCounterType.SampleCounter));

PerformanceCounterCategory.Create(customCategory, "This is just an example", PerformanceCounterCategoryType.SingleInstance, counterCreationDataCollection);

}

Tenga en cuenta que se realiza una verificación para validar si el contador de rendimiento personalizado que se creará ya existe. El contador de rendimiento personalizado solo se crea si no existe. A continuación, se crea una instancia de CounterCreaionDataCollection. Con la clase CounterCreationData, se agregan nuevos contadores a la colección. Una vez que se han agregado los contadores necesarios, se llama al método Create de la clase PerformanceCounterCategory para crear la categoría de rendimiento personalizada.

Tenga en cuenta que su aplicación debe tener los permisos necesarios para acceder a los contadores de rendimiento que necesita. Siempre recomendaría iniciar Visual Studio IDE en el modo Administrador. Los contadores de rendimiento ayudan mucho a analizar el rendimiento de sus aplicaciones: puede analizar los datos de rendimiento en el momento en que su aplicación está en ejecución.