Temps d'exécution d'une requête Web – Exemple C#
Dans cet article, vous trouverez un exemple simple de création d’un gestionnaire de messages personnalisé pour l’enregistrement du temps d’exécution d’une requête Web.
Pour optimiser les performances, il est parfois nécessaire de connaître le temps d’exécution des requêtes Web. Par exemple, vous voulez savoir combien de temps prend la lecture d’un fichier dans le système de fichiers ou le téléchargement de données à partir d’un serveur distant.
Gestionnaire de messages pour l’enregistrement de l’heure de chargement d’un fichier
Création d’un TimeLoggerMessageHandler pour l’enregistrement du temps d’exécution d’une requête Web
L’extrait de code suivant montre comment créer un TimeLoggerMessageHandler pour enregistrer le temps nécessaire à la lecture d’un fichier à partir du système de fichiers.
1// Log request time with custom C# message handler
2
3// Define the TimeLoggerMessageHandler class that is derived from the MessageHandler class
4public class TimeLoggerMessageHandler : MessageHandler
5{
6 // Override the Invoke() method
7 public override void Invoke(INetworkOperationContext context)
8 {
9 // Start the stopwatch
10 Stopwatch stopwatch = Stopwatch.StartNew();
11
12 // Invoke the next message handler in the chain
13 Next(context);
14
15 // Stop the stopwatch
16 stopwatch.Stop();
17
18 // Print the result
19 Debug.WriteLine("Request: " + context.Request.RequestUri);
20 Debug.WriteLine("Time: " + stopwatch.ElapsedMilliseconds + "ms");
21 }
22}
Utilisez la classe Stopwatch de l’espace de noms System.Diagnostics pour mesurer avec précision le temps nécessaire à l’exécution de la requête Web. La méthode StartNew() commence à enregistrer le temps d’exécution de la requête Web jusqu’à ce que la méthode Stop() soit appelée.
Ajout du TimeLoggerMessageHandler au pipeline
Le constructeur Configuration() initialise une instance de la classe Configuration. Une fois la configuration créée, les méthodes GetService <INetworkService> ;() et MessageHandlers.Insert() sont invoquées. La méthode Insert() ajoute le TimeLoggerMessageHandler à la première place dans la collection des gestionnaires de messages.
Utilisez le constructeur
HTMLDocument(address, configuration
) pour initialiser un document HTML et implémenter l’exemple d’enregistrement du temps de chargement du document.
1// Track HTML load time in C# using a custom network message handler
2
3// Create an instance of the Configuration class
4using Configuration configuration = new Configuration();
5
6// Add the TimeLoggerMessageHandler to the chain of existing message handlers
7INetworkService service = configuration.GetService<INetworkService>();
8MessageHandlerCollection handlers = service.MessageHandlers;
9
10handlers.Insert(0, new TimeLoggerMessageHandler());
11
12// Prepare path to a source document file
13string documentPath = Path.Combine(DataDir, "input.htm");
14
15// Initialize an HTML document with specified configuration
16using HTMLDocument document = new HTMLDocument(documentPath, configuration);
Vous pouvez télécharger les exemples complets et les fichiers de données sur GitHub.