¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. C# 10
  3. Monitorización
Extrait - C# 10 Desarrolle aplicaciones Windows con Visual Studio 2022
Extractos del libro
C# 10 Desarrolle aplicaciones Windows con Visual Studio 2022
4 opiniones
Volver a la página de compra del libro

Monitorización

La monitorización de la ejecución

La monitorización de la ejecución de la aplicación permite guardar información sobre su estado, sin interrumpirla. Las aplicaciones complejas no se pueden examinar línea a línea para identificar un error de lógica. Las clases Debug y Trace del espacio de nombres System.Diagnostics exponen métodos estáticos que permiten probar las condiciones de ejecución y guardar los mensajes que se mostrarán en la ventana Resultado del depurador. Esta información también se transmite a la colección de objetos que escuchan, que se comparte entre ambas.

1. Las clases Debug y Trace

Las clases Debug y Trace son idénticas funcionalmente. La diferencia principal es que las instrucciones de la clase Debug no se incluyen por defecto durante la compilación en modo release, a diferencia de la clase Trace. Por este motivo, la clase Debug será más adecuada para la depuración de la aplicación y la clase Trace se usará para el seguimiento y optimización, después de la finalización de la aplicación.

Los métodos de la clase Debug se marcan con el atributo Conditional, que indica la constante DEBUG, lo que permite especificar que la constante se debe definir para compilar la instrucción:

[Conditional("DEBUG")] 

Los métodos de la clase Trace también se marcan con el atributo Conditional, pero la constante es TRACE:

[Conditional("TRACE")] 

Estas constantes se definen en las propiedades del proyecto, en la pestaña Compilar. De manera predeterminada, en modo de compilación debug se definen las dos constantes DEBUG y TRACE, mientras que en modo de compilación release solo se define la constante TRACE por defecto:

images/cap15_img_01.png

Las dos clases exponen una serie de métodos para escribir en el listener:

  • Assert: verifica una condición. Si es falsa, se escribe un mensaje en el listener y en la ventana Salida ([Ctrl] W, O).

Trace.Assert(false, "Mensaje del método Assert."); 
images/cap15_img_02.png
  • Fail: como para el método Assert, se escribe un mensaje en el listener y en la ventana Salida ([Ctrl][Alt]O).

Trace.Fail("Mensaje del método Fail."); 
  • Write: escribe un mensaje en el listener.

Trace.Write("Mensaje del método Write."); 
  • WriteIf: escribe...

Los archivos de traza de eventos

Los archivos de traza de eventos representan el punto central de los mensajes que permiten comprobar el estado de salud del sistema y de las aplicaciones. Los errores de una aplicación deben escribir mensajes en los archivos de traza de eventos a partir de un objetivo central y facilitar el seguimiento del ciclo de vida de la aplicación.

1. La interacción con los archivos de traza de eventos

Es posible acceder a los archivos de traza de eventos desde Visual Studio en el Explorador de servidores ([Ctrl][Alt] S):

images/cap15_img_07.png

Un evento se define fundamentalmente con las siguientes propiedades:

  • Category: es posible definir una categoría para facilitar el filtrado de los eventos.

  • Date: corresponde a la fecha de entrada en el log de eventos.

  • EntryType: indica el tipo del mensaje: Información, Warning o Error. Se usan dos tipos adicionales solo en el log de seguridad: FailureAudit y SuccessAudit. 

  • EventID: identificador del evento.

  • Message: mensaje del evento.

  • Source: indica el nombre del programa que ha registrado el evento.

En la sección anterior hemos visto cómo escribir mensajes en un log de eventos utilizando la clase EventLogTraceListener. Esta clase contiene un miembro de tipo EventLog que se encarga de la escritura en el log de eventos. Este tipo también se puede usar directamente para leer y escribir en los archivos de traza.

La clase EventLog forma parte del espacio de nombres...

Los contadores de rendimiento

Monitorizar una aplicación durante su ciclo de vida es muy importante para añadir mejoras en el rendimiento, aumentar la rapidez y optimizar el espacio de memoria utilizado. Los contadores de rendimiento son indispensables para comprobar y controlar estos puntos.

Los contadores de rendimiento están accesibles desde la opción de menú Ver - Explorador de servidores ([Ctrl][Alt] S):

images/cap15_img_08.png

El espacio de nombres System.Diagnostics proporciona las clases que permiten interactuar con los contadores de rendimiento. Entre las más utilizadas están:

  • PerformanceCounter: esta clase se puede usar para monitorizar y modificar los contadores.

  • PerformanceCounterCategory: esta clase permite gestionar y recorrer las categorías de contadores.

Puede utilizar esos contadores en su aplicación o crear nuevos, específicos para una aplicación, para poder analizarlos.

1. La creación de contadores de rendimiento

a. Desde Visual Studio

Los contadores de rendimiento se pueden crear directamente desde Visual Studio, en la ventana Explorador de servidores ([Ctrl][Alt] S).

Abra el menú contextual del nodo Contadores de rendimiento y, a continuación, pulse en la opción de menú Crear categoría nueva...:

images/cap15_img_09.png

Se abre la ventana Generador de contadores de rendimiento. Indique SelfMailer como nombre de la categoría y agregue una descripción. Para poder terminar la creación de la categoría hay que crear al menos un contador. Pulse en el botón Nuevo e indique SendPerSecond para el nombre del contador. Seleccione RateOfCountsPerSecond32 para el campo Tipo e indique una descripción para este contador.

images/cap15_img_10.png

Después de la validación del formulario, la categoría y el contador aparecen en la lista de contadores de rendimiento:

images/cap15_img_11.png

b. Desde el código

La creación de contadores de rendimiento también se puede hacer de manera dinámica mediante código. A continuación, se muestra el método que permite crear el mismo contador SelfMailer que se ha creado anteriormente desde la interfaz de Visual Studio:

public void CreateCounter()  
{  
    if (PerformanceCounterCategory.Exists("SelfMailer"))  
    {  
        PerformanceCounterCategory.Delete("SelfMailer");  ...