Czy ktoś wie, czy klasa HiPerfTimer lub StopWatch jest lepsza do testowania porównawczego i dlaczego?Timer o wysokiej wydajności kontra StopWatch
Odpowiedz
Stopwatch opiera się na Wysoka rozdzielczość czasomierza (jeśli są dostępne), można sprawdzić, które z IsHighResolution
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.
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.
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
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
Z roku 2002, kiedy istniał .NET 1.1. +1 – nawfal