2009-09-28 9 views

Odpowiedz

6

StopWatch- działa również w systemach, które nie obsługują licznik wydajności wysokiej rozdzielczości i nie trzeba dowolny zewnętrzne biblioteki do korzystania z niego.

Drugi rzuca wyjątek Win32Exception, jeśli nie ma obsługi licznika o wysokiej rozdzielczości.

18

Są one takie same, jeśli chodzi o synchronizację w wysokiej rozdzielczości.

Zarówno użyć tego:

[DllImport("Kernel32.dll")] 
private static extern bool QueryPerformanceCounter(out long PerformanceCount); 

a to:

[DllImport("Kernel32.dll")] 
private static extern bool QueryPerformanceFrequency(out long Frequency); 

zrobić bazowego taktowania. (Możesz to sprawdzić za pomocą Reflector.NET). Użyłbym StopWatch, ponieważ jest już częścią struktury (nie ma potrzeby łączenia kolejnej biblioteki DLL) i ma lepsze funkcje niż HiPerfTimer.

+6

Tak - jednak StopWatch jest rzeczywiście lepszy, ponieważ ma opcję awaryjną. HiPerfTimer rzuca wyjątek Win32Exception, jeśli licznik wysokiej wydajności nie jest obsługiwany. – RichardOD

+1

Tak, ostatecznie zrezygnowałem z HiPerfTimer. Artykuł na temat CodeProject jest trochę słaby (ale pomysł był dobry). Poleciłem również StopWatch, jest bardziej niezawodny i ma domyślną wartość, gdy QueryPerformanceFrequency zawodzi, co jest powiązane z IsHighResolution wspomnianym przez Shaya. – ParmesanCodice

Powiązane problemy