Frage

Ich brauche einig Performance-Benchmarks auf .NET-Programmen (C #) in Windows zu tun, aber ich habe nicht viel Benchmarking in der Windows-Welt getan. Ich habe blickte in die Windows 2000 / XP Systemmonitor mit benutzerdefinierten Zählern für diese, aber ich glaube nicht, das ist ganz das, was ich will.

Gibt es gute System Einrichtungen hierfür in Windows XP, oder muß ich System.Diagnostics.Stopwatch nur verwenden, [Bearbeiten] und Textprotokolle für die manuelle Interpretation schreiben, oder gibt es etwas anderes?

Edit: Gibt es etwas, über System.Diagnostics.Stopwatch

?
War es hilfreich?

Lösung

Für Mikro-Benchmarking Ich mag MeasureIt (kann von http: //msdn.microsoft.com/en-us/magazine/cc500596.aspx ). Es ist ein Testprojekt von Vance Morrison eine Performance Architect auf der CLR geschrieben. Sie hat derzeit einen guten Satz von Benchmarks für eine Reihe von .Net / CLR Kernmethoden. Der beste Teil ist, dass es trivial zu optimieren und neue Maßstäbe hinzufügen für was auch immer Sie testen möchten. run „MeasureIt / bearbeiten“ Einfach und es wird starten VS mit dem Projekt für sich selbst, so dass Sie sehen können, wie diese Benchmarks geschrieben werden und neue hinzufügen in ähnlicher Weise, wenn Sie mögen.

Wie bereits erwähnt Stoppuhr ist wahrscheinlich der einfachste Weg, dies zu tun und MeasureIt verwendet Stoppuhr unter für seine Timings aber es hat auch einige andere Dinge, wie einen Code-Block X-mal ausgeführt wird und dann bietet Ihnen Statistiken für die Läufe und was nicht .

Andere Tipps

using System.Diagnostics;
....

Stopwatch sw = new Stopwatch();

sw.Start();

// Code you want to time...

// Note: for averaged accuracy (without other OS effects), 
//       run timed code multiple times in a loop 
//       and then divide by the number of runs.

sw.Stop();

Console.WriteLine("Took " + sw.ElapsedTicks + " Ticks");

Wenn Sie nur ein paar schnelle Nummern möchten, können Sie Powershell verwenden Gesamtausführung Zeit. Verwenden Sie das Maß-Befehl cmdlet. Es ist so ähnlich wie „Zeit“ in Unix.

> measure-command { your.exe arg1 }

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 4
Milliseconds      : 996
Ticks             : 49963029
TotalDays         : 5.78275798611111E-05
TotalHours        : 0.00138786191666667
TotalMinutes      : 0.083271715
TotalSeconds      : 4.9963029
TotalMilliseconds : 4996.3029

Es gibt durchaus ein paar Profilern gibt. Hier sind einige von denen, die ich kenne:

Wenn Sie mit der Verwendung von System.Diagnostics.Stopwatch gehen, werden Sie zum Instrument der Lage sein, und nur bestimmte Punkte des Codes messen, wo Sie explizit die Start-Put / Stopp um. Das ist gut genug, um für bestimmte Stücke zu messen, wie eine enge Schleife oder solche Dinge, aber es geht nicht, dass Sie ein vollständiges Bild zu geben, wo Ihr Programm den größten Teil seiner Zeit verbringt.

Das kann nicht sein, was Sie wollen, aber DotTrace bietet viele nützliche Diagnose und ist integriert in Visual Studio.

Wenn Ihr Projekt ist ziemlich groß und es gibt viele Module große Anzahl von Anrufen zu tun können Sie Ihre: http://www.moduleanalyzer.com/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top