Poprawny sposób użycia PerformanceCounter w .NET do pomiaru wykorzystania procesora
Chcę zmierzyć wydajność mojej klasy biznesowej w usłudze internetowej. Jak mogę to zrobić poprzez kodowanie?
Chcę wiedzieć, ile procesora zużywa moja klasa biznesowa do wykonania operacji i jak zmienia się wydajność, jeśli usługa sieciowa otrzyma wiele jednoczesnych wywołań usług.
Nie chcę mierzyć wydajności mojej usługi internetowej; Chcę tylko wiedzieć, jak działa moja klasa biznesowa.
Moja myśl:
Po przeczytaniu niektórych blogów postanawiam napisać fragment kodu, który stworzyPerformanceCounter
jak pokazano niżej. Z tego kodu mogę utworzyć wiele wątków w jednymfor
pętla. Każdy wątek wywoła moją klasę. I w tym samymfor
pętla, zadzwonię doNextValue()
metoda na instancji licznika.
System.Diagnostics.PerformanceCounter CpuCounter = new System.Diagnostics.PerformanceCounter();
CpuCounter.CategoryName = "Process";
CpuCounter.CounterName = "% Processor Time";
CpuCounter.InstanceName = Process.GetCurrentProcess().ProcessName;
Pytania:
Czy to podejście jest prawidłowe?Czy mam używać kategorii „Proces” lub „Procesor”?Jak mogę uzyskać dane dotyczące wydajności, aby utworzyć z niego raport? na przykład Przy 100 równoczesnych wątkach zużycie procesora wynosi 70%, przy 200 wątkach dochodzi do 90% itd.Moja logika biznesowa kończy się bardzo szybko. Z drugiej stronyNextValue()
metoda daje poprawną wartość po odstępie jednej sekundy, jak wspomniano wto blog. Jak sobie z tym poradzić?Czasami,NextValue()
metoda daje wartość powyżej 100. Czy to średnie użycie procesora przekracza 100%? (Myślę, że wartość tego licznika nie powinna być interpretowana jako% wykorzystania procesora. Czy mam rację?)Uwaga: Używam procesora Windows 7 premium i Intel Core i5. Po raz pierwszy używam liczników wydajności. Więc niektóre pytania mogą być głupie.