Testen Sie Ihren Code für Geschwindigkeit?

7

Ich bin ein totaler Neuling, aber ich schrieb ein kleines Programm, das an Strings in C # arbeitete, und ich bemerkte, dass der Code wesentlich schneller ausgeführt wurde, wenn ich ein paar Dinge anders machte.

Es hat mich also gewundert, wie gehst du die Ausführungsgeschwindigkeit deines Codes an? Gibt es irgendwelche (kostenlosen) Hilfsmittel? Gehst du mit einem System.Timer auf die altmodische Art und Weise und tust du es selbst?

    
Ashlocke 22.09.2008, 22:00
quelle

9 Antworten

12

Was Sie beschreiben, ist als Leistungsprofilierung bekannt. Es gibt viele Programme, die Sie tun können, wie Jetbrains Profiler oder Anspreche Profiler , obwohl die meisten Ihre Anwendung während der Messung der Leistung verlangsamen werden.

Um Ihre eigene Leistungsprofilerstellung von Hand zu erstellen, können Sie System.Diagnostics.Stopwatch verwenden und eine einfache Console.WriteLine, wie du es beschrieben hast.

Beachten Sie auch, dass der C # JIT-Compiler den Code abhängig vom Typ und der Häufigkeit optimiert, mit der er aufgerufen wird. Spielen Sie also Schleifen verschiedener Größen und Methoden wie rekursive Aufrufe, um ein Gefühl dafür zu bekommen, was am besten funktioniert.

>     
Xian 22.09.2008, 21:56
quelle
11

ANTS Profiler von RedGate ist ein wirklich netter Performance-Profiler. dotTrace Profiler von JetBrains ist auch großartig. Mit diesen Tools können Sie Leistungsmetriken anzeigen, die in jeder einzelnen Zeile erstellt werden können.

Scree Schuss von ANTS Profiler: ANTS http://www.red-gate.com/products/ants_profiler/images/app /timeline_calltree3.gif

Wenn Sie sicherstellen möchten, dass eine bestimmte Methode während des Komponententests innerhalb eines bestimmten Leistungsschwellenwerts bleibt, würde ich das Stopwatch class um die Ausführungszeit einer Methode einmal oder mehrmals in einer Schleife zu überwachen und den Durchschnitt zu berechnen und dann Assert gegen das Ergebnis.

    
Eric Schoonover 22.09.2008 21:53
quelle
7

Nur eine Erinnerung - stellen Sie sicher, in Relase, nicht Debug zu kompilieren! (Ich habe diesen Fehler von erfahrenen Entwicklern gesehen - es ist leicht zu vergessen).

    
ripper234 22.09.2008 22:01
quelle
2

Was Sie beschreiben, ist "Performance Tuning". Wenn wir über Performance-Tuning sprechen, gibt es zwei Aspekte. (a) Reaktionszeit - wie lange dauert es, eine bestimmte Anfrage / ein Programm auszuführen. (b) Durchsatz - Wie viele Anfragen können in einer Sekunde ausgeführt werden. Wenn wir typischerweise "optimieren" - wenn wir unnötige Verarbeitung eliminieren, verbessern sich sowohl die Antwortzeit als auch der Durchsatz. Wenn Sie Warte-Ereignisse in Ihrem Code haben (wie Thread.sleep (), I / O wait usw.), ist Ihre Antwortzeit betroffen, der Durchsatz ist jedoch nicht betroffen. Durch die parallele Verarbeitung (mehrere Threads erzeugen) können wir die Antwortzeit verbessern, aber der Durchsatz wird nicht verbessert. Typischerweise sind für die serverseitige Anwendung sowohl die Antwortzeit als auch der Durchsatz wichtig. Für Desktop-Anwendungen (wie IDE) ist der Durchsatz nicht wichtig, nur die Antwortzeit ist wichtig.

Sie können die Antwortzeit mit "Performance Testing" messen - Sie notieren nur die Antwortzeit für alle Schlüsseltransaktionen. Sie können den Durchsatz mit "Load Testing" messen. Sie müssen kontinuierlich Anfragen aus einer ausreichend großen Anzahl von Threads / Clients pumpen, sodass die CPU-Auslastung des Server-Computers 80-90% beträgt. Wenn wir eine Anfrage pumpen, müssen wir das Verhältnis zwischen verschiedenen Transaktionen (Transaktionsmix genannt) beibehalten - zB: in einem Reservierungssystem wird es 10 Buchungen für jede 100 Suche geben. Es wird eine Absage für jede 10 Buchung usw. geben.

Nachdem Sie festgestellt haben, dass die Transaktionen für die Antwortzeit optimiert werden müssen (Leistungstest), können Sie die Hotspots mithilfe eines Profilers identifizieren. Sie können die Hotspots für den Durchsatz identifizieren, indem Sie den Antwortzeitanteil dieser Transaktion vergleichen. Angenommen, in Suche, Buchung, Stornoszenario ist das Verhältnis 89: 10: 1. Reaktionszeit sind 0,1 Sekunden, 10 Sekunden und 15 Sekunden. laden für Suche - 0.1 * .89 = 0.089 laden für Buchung - 10 * .1 = 1 laden für cancell = 15 * .01 = 0,15 Hier wird die Buchungsoptimierung einen maximalen Einfluss auf den Durchsatz haben. Sie können auch Hotspots für den Durchsatz identifizieren, indem Sie Thread-Dumps (im Fall von Java-basierten Anwendungen) wiederholt ausführen.

    
Rejeev Divakaran 23.09.2008 16:45
quelle
1

Verwenden Sie einen Profiler.

Wenn Sie nur eine bestimmte Methode verwenden möchten, ist die Stoppuhr-Klasse möglicherweise eine gute Wahl.

    
Lars A. Brekken 22.09.2008 21:52
quelle
0

Ich mache folgende Dinge: 1) Ich verwende Ticks (z. B. in VB.Net Now.ticks) zum Messen der aktuellen Zeit. Ich subtrahiere die Start-Ticks vom fertigen Ticks-Wert und dividiere durch TimeSpan.TicksPerSecond, um zu ermitteln, wie viele Sekunden es gedauert hat. 2) Ich vermeide UI-Operationen (wie console.writeline). 3) Ich führe den Code über eine umfangreiche Schleife (wie 100.000 Iterationen), um die Verwendung / Betriebssystem-Variablen so gut wie möglich herauszufiltern.

    
torial 22.09.2008 21:52
quelle
0

Sie können die StopWatch-Klasse für Zeitmethoden verwenden. Denken Sie daran, das erste Mal ist oft langsam, weil der Code Jitter sein muss.

    
Chris 22.09.2008 21:53
quelle
0

Es gibt eine native .NET-Option (Team Edition für Softwareentwickler), die einige Anforderungen an die Performanceanalyse erfüllen kann. Wählen Sie im .NET IDE-Menü 2005 Extras - & gt; Leistungswerkzeuge - & gt; Leistungs-Assistent ...

[GSS ist wahrscheinlich richtig, dass Sie Team Edition haben müssen]

    
e-holder 31.12.2008 17:05
quelle
0

Dies ist ein einfaches Beispiel zum Testen der Code-Geschwindigkeit. Ich hoffe, ich habe dir geholfen.

%Vor%     
Nikusha Kalatozi 22.02.2016 16:14
quelle

Tags und Links