Tiempo de ejecución de solicitud web – ejemplo de C#
En este artículo, encontrará un ejemplo sencillo de cómo crear un controlador de mensajes personalizado para el registro del tiempo de ejecución de una solicitud web.
A veces, para optimizar el rendimiento, es posible que necesite conocer el tiempo de ejecución de la solicitud web. Por ejemplo, desea saber cuánto tiempo se tarda en leer un archivo en el sistema de archivos o descargar datos desde un servidor remoto.
Controlador de mensajes para registrar el tiempo de carga del archivo
Creación de un TimeLoggerMessageHandler para un registro del tiempo de ejecución de una solicitud web
El siguiente fragmento de código muestra cómo crear un TimeLoggerMessageHandler para registrar el tiempo necesario para leer un archivo del sistema de archivos.
1// Define the TimeLoggerMessageHandler class that is derived from the MessageHandler class
2public class TimeLoggerMessageHandler : MessageHandler
3{
4 // Override the Invoke() method
5 public override void Invoke(INetworkOperationContext context)
6 {
7 // Start the stopwatch
8 var stopwatch = Stopwatch.StartNew();
9
10 // Invoke the next message handler in the chain
11 Next(context);
12
13 // Stop the stopwatch
14 stopwatch.Stop();
15
16 // Print the result
17 Debug.WriteLine("Request: " + context.Request.RequestUri);
18 Debug.WriteLine("Time: " + stopwatch.ElapsedMilliseconds + "ms");
19 }
20}
Utilice la clase Stopwatch en el espacio de nombres System.Diagnostics para medir con precisión el tiempo que lleva ejecutar la solicitud web. El método StartNew() comienza a registrar el tiempo para completar la solicitud web hasta que se llama al método Stop().
Agregar TimeLoggerMessageHandler a la canalización
El constructor Configuration() inicializa una instancia de la clase Configuration. Una vez creada la configuración, se invocan los métodos GetService<INetworkService>() y MessageHandlers.Insert(). El método Insert() agrega TimeLoggerMessageHandler en el primer lugar de la colección de controladores de mensajes.
Utilice el constructor
HTMLDocument(address, configuration
) para inicializar un documento HTML e implementar el ejemplo para registrar el tiempo de carga del documento.
1// Create an instance of the Configuration class
2using var configuration = new Configuration();
3
4// Add the TimeLoggerMessageHandler to the chain of existing message handlers
5var service = configuration.GetService<INetworkService>();
6var handlers = service.MessageHandlers;
7
8handlers.Insert(0, new TimeLoggerMessageHandler());
9
10// Prepare path to a source document file
11string documentPath = Path.Combine(DataDir, "input.htm");
12
13// Initialize an HTML document with specified configuration
14using var document = new HTMLDocument(documentPath, configuration);
Puede descargar los ejemplos completos y los archivos de datos desde GitHub.