Ausführungszeit von Webanfragen – C#-Beispiel
In diesem Artikel finden Sie ein einfaches Beispiel dafür, wie Sie einen benutzerdefinierten Message-Handler für die Protokollierung der Ausführungszeit einer Web-Anfrage erstellen.
Um die Leistung zu optimieren, müssen Sie manchmal die Ausführungszeit von Webanfragen herausfinden. Sie möchten zum Beispiel wissen, wie viel Zeit das Lesen einer Datei im Dateisystem oder das Herunterladen von Daten von einem Remote-Server in Anspruch nimmt.
Message Handler für die Protokollierung des Zeitpunkts des Dateiladens
Erstellen eines TimeLoggerMessageHandlers für die Protokollierung der Ausführungszeit einer Webanfrage
Der folgende Codeausschnitt zeigt, wie man einen TimeLoggerMessageHandler erstellt, um die Zeit zu protokollieren, die für das Lesen einer Datei aus dem Dateisystem benötigt wird.
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}
Verwenden Sie die Klasse Stopwatch im System.Diagnostics Namespace, um die Zeit für die Ausführung der Web-Anforderung genau zu messen. Die Methode StartNew() beginnt mit der Aufzeichnung der Zeit für die Fertigstellung der Webanforderung, bis die Methode Stop() aufgerufen wird.
Hinzufügen des TimeLoggerMessageHandlers zur Pipeline
Der Konstruktor Configuration() initialisiert eine Instanz der Klasse Configuration. Nachdem die Konfiguration erstellt wurde, werden die Methoden GetService <INetworkService>() und MessageHandlers.Insert() aufgerufen. Die Methode Insert() fügt den TimeLoggerMessageHandler an erster Stelle in die Sammlung der MessageHandler ein.
Verwenden Sie den Konstruktor
HTMLDocument(address, configuration
), um ein HTML-Dokument zu initialisieren und das Beispiel für die Protokollierung der Ladezeit des Dokuments zu implementieren.
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);
Sie können die vollständigen Beispiele und Datendateien von GitHub herunterladen.