Chcę uzyskać ogólne całkowite wykorzystanie procesora dla aplikacji w języku C #. Znalazłem wiele sposobów zagłębiania się we właściwości procesów, ale chcę tylko użycia procesora przez procesy i całego procesora, tak jak w Menedżerze zadań.
W jaki sposób mogę to zrobić?
Odpowiedzi:
Możesz użyć klasy PerformanceCounter z System.Diagnostics .
Zainicjuj w ten sposób:
Spożywać w ten sposób:
źródło
Nieco więcej niż wymagano, ale używam dodatkowego kodu czasowego do śledzenia i ostrzegania, jeśli użycie procesora wynosi 90% lub więcej przez dłuższy okres 1 minuty lub dłużej.
źródło
cpuCounter.NextValue
zwraca afloat
. Po co więc przypisywać to dodynamic
? Dlaczego więc zwracasz todynamic
jakoobject
? Więc po co próbować przypisywać anobject
doint
liniiint cpuPercent = getCPUCounter()
? (Ten kod nie będzie się kompilował.)Po spędzeniu czasu na czytaniu kilku różnych wątków, które wydawały się dość skomplikowane, wpadłem na to. Potrzebowałem go dla 8-rdzeniowej maszyny, na której chciałem monitorować serwer SQL. Dla poniższego kodu podałem „sqlservr” jako appName.
Wydaje się, że poprawnie mierzy% procesora używanego przez SQL na moim 8-rdzeniowym serwerze.
źródło
done
jest prawda? Chyba że coś przeoczyłem, wydaje się, że jest to niekończąca się pętla:while(!done){...}
W porządku, rozumiem! Dzięki za pomoc!
Oto kod, aby to zrobić:
źródło
Za pomocą WMI można uzyskać informacje o procencie procesora. Możesz nawet zalogować się na komputerze zdalnym, jeśli masz odpowiednie uprawnienia. Spójrz na http://www.csharphelp.com/archives2/archive334.html, aby dowiedzieć się, co możesz osiągnąć.
Pomocna może być również referencja MSDN dla przestrzeni nazw Win32_Process .
Zobacz także przykład CodeProject: Jak (prawie) wszystko w WMI za pośrednictwem C # .
źródło
CMS ma rację, ale także jeśli korzystasz z eksploratora serwerów w Visual Studio i bawisz się kartą licznika wydajności, możesz dowiedzieć się, jak uzyskać wiele przydatnych danych.
źródło
Wydaje mi się, że to działa, na przykład czekanie, aż procesor osiągnie określony procent
źródło
Ta klasa automatycznie odpytuje licznik co 1 sekundę i jest również bezpieczna dla wątków:
źródło
System.DateTime
jest w rzeczywistości 8-bajtowym typem wartości, co oznacza, że przypisania doDateTime
zmiennej nie mają charakteru atomowego. Ten kod nie jest bezpieczny dla wątków na platformach 32-bitowych.Nie podobało mi się dodawanie 1-sekundowego przeciągnięcia do wszystkich
PerformanceCounter
rozwiązań. Zamiast tego zdecydowałem się naWMI
rozwiązanie. Powodem, dla którego istnieje 1 sekunda oczekiwania / przeciągnięcia, jest umożliwienie dokładnego odczytu podczas korzystania zPerformanceCounter
. Jeśli jednak często wywołujesz tę metodę i odświeżasz te informacje, radzę, aby nie musieć ciągle ponosić tego opóźnienia ... nawet jeśli zastanawiasz się nad zrobieniem procesu asynchronicznego, aby go uzyskać.Zacząłem od fragmentu stąd Zwracanie użycia procesora w WMI przy użyciu C # i dodałem pełne wyjaśnienie rozwiązania na moim blogu poniżej:
Uzyskaj wykorzystanie procesora we wszystkich rdzeniach w C # za pomocą WMI
źródło
Oryginalne informacje w tym linku https://gavindraper.com/2011/03/01/retrieving-accurate-cpu-usage-in-c/
źródło