System.Dyagnostic

Author

Aldo Jaenes

Introducción

La biblioteca System.Diagnostics en .NET ofrece herramientas para monitorear y controlar el rendimiento de aplicaciones. En este documento, aprenderás cómo usar esta biblioteca para medir parámetros clave como el uso de CPU, memoria, disco, red, y más.

Este tutorial incluye ejemplos prácticos en C# y una descripción de los contadores disponibles para una monitorización detallada.


System.Diagnostics: Conceptos Básicos

La biblioteca System.Diagnostics permite: - Acceder a contadores de rendimiento del sistema. - Monitorear procesos y recursos. - Registrar eventos en el sistema operativo. - Medir tiempos de ejecución de métodos o procesos.

Antes de usar estas funciones, asegúrate de incluir el espacio de nombres correspondiente en tu proyecto de C#: ```csharp using System.Diagnostics;


Parámetros Clave para Medir y Controlar

1. CPU

Categoría: Processor

Estos contadores permiten monitorear el rendimiento del procesador: - % Processor Time: Porcentaje del tiempo que el procesador está ocupado. - % User Time: Tiempo dedicado a procesos en modo usuario. - % Privileged Time: Tiempo dedicado a procesos en modo kernel. - Interrupts/sec: Número de interrupciones gestionadas por el procesador. - Processor Queue Length: Número de hilos esperando ser ejecutados.

Ejemplo:

PerformanceCounter cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
Console.WriteLine($"CPU Usage: {cpuCounter.NextValue()}%");

2. Memoria

Categoría: Memory

Contadores útiles para evaluar el uso de memoria: - Available MBytes: Memoria física disponible. - Committed Bytes: Memoria virtual comprometida. - Cache Bytes: Memoria usada para caché del sistema. - Pages/sec: Transferencias de páginas entre RAM y disco.

Ejemplo:

PerformanceCounter memoryCounter = new PerformanceCounter("Memory", "Available MBytes");
Console.WriteLine($"Available Memory: {memoryCounter.NextValue()} MB");

3. Disco

Categoría: PhysicalDisk

Métricas del rendimiento del disco: - % Disk Time: Porcentaje del tiempo que el disco está ocupado. - Disk Reads/sec: Operaciones de lectura por segundo. - Disk Writes/sec: Operaciones de escritura por segundo. - Avg. Disk Queue Length: Longitud promedio de la cola de solicitudes.

Ejemplo:

PerformanceCounter diskCounter = new PerformanceCounter("PhysicalDisk", "% Disk Time", "_Total");
Console.WriteLine($"% Disk Time: {diskCounter.NextValue()}%");

4. Red

Categoría: Network Interface

Métricas relacionadas con la red: - Bytes Received/sec: Bytes recibidos por segundo. - Bytes Sent/sec: Bytes enviados por segundo. - Packets Received/sec: Paquetes recibidos por segundo. - Packets Sent/sec: Paquetes enviados por segundo.

Ejemplo:

PerformanceCounter networkCounter = new PerformanceCounter("Network Interface", "Bytes Received/sec", "Ethernet");
Console.WriteLine($"Bytes Received/sec: {networkCounter.NextValue()}");

5. Proceso

Categoría: Process

Permite monitorizar procesos individuales: - % Processor Time: Porcentaje del tiempo del procesador usado por un proceso. - Working Set: Memoria física usada por un proceso. - Private Bytes: Memoria privada utilizada por un proceso. - Thread Count: Número de hilos en el proceso.

Ejemplo:

PerformanceCounter processCounter = new PerformanceCounter("Process", "% Processor Time", "MyApp");
Console.WriteLine($"Process CPU Usage: {processCounter.NextValue()}%");

Monitoreo de Red con Ping

Puedes usar la clase Ping para medir la latencia de red:

using System.Net.NetworkInformation;

Ping ping = new Ping();
PingReply reply = ping.Send("192.168.1.1");

if (reply.Status == IPStatus.Success)
{
    Console.WriteLine($"Ping Time: {reply.RoundtripTime}ms");
}
else
{
    Console.WriteLine("Ping failed.");
}

Parámetros Disponibles

Aquí tienes una lista de categorías y contadores predefinidos disponibles en System.Diagnostics:

Categorías Principales

  • Processor
  • Memory
  • PhysicalDisk
  • Network Interface
  • System
  • Process
  • ASP.NET
  • .NET CLR Memory

Usa el siguiente código para obtener todas las categorías disponibles:

foreach (string category in PerformanceCounterCategory.GetCategories())
{
    Console.WriteLine($"Category: {category}");
}

Consideraciones

  • Permisos: Algunos contadores requieren permisos administrativos.
  • Compatibilidad: Asegúrate de que los contadores estén disponibles en tu sistema.
  • Manejo de errores: Implementa manejo de excepciones para evitar fallos al acceder a contadores no existentes.

Conclusión

La biblioteca System.Diagnostics ofrece una solución poderosa y flexible para monitorear el rendimiento de aplicaciones .NET. Puedes usar los contadores predefinidos o personalizarlos según tus necesidades. Con esta guía y los ejemplos proporcionados, puedes empezar a analizar y optimizar el rendimiento de tu aplicación de manera eficiente.