6 Stimmen

Leistungsmetriken für bestimmte Routinen: Gibt es bewährte Verfahren?

Ich würde gerne Metriken zu bestimmten Routinen meines Codes sammeln, um zu sehen, wo ich am besten optimieren kann. Nehmen wir ein einfaches Beispiel und sagen wir, ich habe eine "Klassen"-Datenbank mit mehreren "Schülern". Angenommen, der aktuelle Code ruft die Datenbank für jeden Schüler auf, anstatt sie alle auf einmal in einem Batch zu erfassen. Ich würde gerne sehen, wie lange jeder Aufruf der Datenbank für jede Schülerzeile dauert.

Dies ist in C#, aber ich denke, es gilt überall. Normalerweise, wenn ich neugierig auf die Leistung einer bestimmten Routine werde, erstelle ich ein DateTime-Objekt, bevor es läuft, führe die Routine aus und erstelle dann ein weiteres DateTime-Objekt nach dem Aufruf und nehme die Millisekunden Differenz zwischen den beiden, um zu sehen, wie lange es läuft. Normalerweise gebe ich dies nur im Trace der Seite aus... es ist also ein bisschen unschön. Gibt es dafür irgendwelche Best Practices? Ich dachte über in der Lage, die Web-App in einige "Diagnose"-Modus zu setzen und tun ausführliche Protokollierung/Ereignisprotokoll schreiben mit was auch immer ich bin nach, aber ich wollte sehen, wenn die Stackoverflow Hive Mind eine bessere Idee hat.

1voto

MichaelT Punkte 6974

In manchen Fällen können Sie die Leistung Ihrer Anwendung am besten einschätzen. Eine Sache, die ich empfehlen kann, ist die Verwendung von System.Diagnostics.Stopwatch anstelle von DateTime, DateTime ist nur bis zu 16 ms genau, während Stopwatch bis auf den CPU-Tick genau ist.

Ich empfehle jedoch, sie mit benutzerdefinierten Leistungszählern für die Produktion zu ergänzen und die Anwendung während der Entwicklung mit dem Profiler laufen zu lassen.

0voto

Kirill Titov Punkte 1891

Ich verwende diese Methode, und ich denke, sie ist sehr genau.

0voto

Patrick Cuff Punkte 27220

Ich denke, Sie haben einen guten Ansatz. Ich empfehle, dass Sie "maschinenfreundliche" Datensätze in der/den Protokolldatei(en) erstellen, damit Sie sie leichter auswerten können. So etwas wie CSV- oder andere getrennte Datensätze, die einheitlich strukturiert sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X