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?
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.
>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.
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.
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.
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]
Dies ist ein einfaches Beispiel zum Testen der Code-Geschwindigkeit. Ich hoffe, ich habe dir geholfen.
%Vor%Tags und Links c# profiling performance timing