2010-12-13 12 views
7

Nie wiem, czy tytuł ma sens, ale staram się zrobić dwie różne metody i sprawdzić, ile razy wykonują na sekundę, lub co 10 sekund.Jak profilować metody C# na sekundę?

Na przykład:

DividePolygons1(Polygon[] polys) 
DividePolygons2(Polygon[] polys) 

DividePolygons1 ran: 
1642 times per 1 second 

DividePolygons2 ran: 
1890 times per 1 second 

Odpowiedz

10

Klasa System.Diagnostics.Stopwatch pomoże tutaj, ale należy uważać, aby wykorzystać wyniki jakoś tak, że optymalizator nie eliminuje logikę próbujesz zmierzyć.

Poza tym wystarczy uruchomić kod, który profilujesz kilka milionów razy w pętli (dostosuj liczbę iteracji, aby zajęło to od 1 do 30 sekund), a następnie podziel liczbę iteracji przez czas potrzebny do uzyskania przepustowość w wykonywaniu na sekundę.

+5

Użyj kompilacji wydania i nie dołączaj debuggera podczas uruchamiania programu. I lepiej uruchomić cały kod jeden raz przed rozpoczęciem testu porównawczego, aby efekty początkowe, takie jak JITing, nie były mierzone. – CodesInChaos

+1

Nie zapomnij uważać na lokalizację odniesienia. Dzielenie tych samych wielokątów może potrwać dłużej, jeśli nie zawsze są tworzone w tym samym czasie. –

+0

@CodeInChaos, w jaki sposób upewnić się, że nie jest podłączony żaden debugger? używając kompilacji wydania robi to automatycznie? –

2

Co bym zrobił:

  • Rozpocznij Stopwatch.
  • W tych funkcjach pobieram prostą zmienną (długą, zmienną lub podwójną, w zależności od tego, jak często sądzisz, że zostaną wywołane), więc jest ona zwiększana przy każdym połączeniu.
  • Zadzwoń do pierwszej funkcji.
  • Zatrzymaj Stopwatch i sprawdź wartość TotalSeconds w odniesieniu do zmiennej, którą inkrementowałem.
  • Powtórz dla drugiej funkcji.
1

Visual Studio 2010 ma profiler, który może określić dokładną liczbę wywołań metod na jednostkę czasu.

+0

Dzięki, czy jest w wersji pro? (nie ostateczny) –

+1

Profiler jest dostępny w wersjach Premium i Ultimate, ale nie Pro. Zobacz http://www.microsoft.com/visualstudio/en-us/products w "Debugowanie i diagnostyka". –