Poniższy artykuł pochodzi z serii Przygotowań do egzaminu 70-536.
W tej lekcji zostanie opisane używanie standardowych oraz własnych liczników wydajności (performance counters).
Monitorowanie liczników
Windows zawiera bardzo dużo performance counterów, które umożliwiają monitorowanie systemu operacyjnego w czasie rzeczywistym. Możemy obejrzeć countery za pomocą wbudowanych mechanizmów Windowsa. W tym celu należy:
1. Klikamy start->Prawym przyciskiem myszy na Komputer-> Zarządzaj
2. W narzędziach systemowych rozwijamy zakładkę wydajność
3. Rozwijamy narzędzia monitorowania->klikamy monitor wydajności
4. Z paska narzędzi wybieramy zielony plusik
5. Wybieramy interesujący nas obiekt do monitorowania i dodajemy go do listy
Aby monitorować liczniki w ramach naszego programu należy najpierw utworzyć instację PerformanceCounter określając przedmiot działania, licznik oraz (jeśli wymagane) instancję. Następnie musimy wywołać metodę PerformanceCounter.NextValue aby zresetować licznik. Poniższy kod pobiera wykorzystanie procesora w poprzedniej sekundzie:
1: PerformanceCounter pc =
2: new PerformanceCounter("Processor", "% Processor Time", "_Total");
3: // Resetujemy licznik
4: pc.NextValue();
5: // Czekamy sekunde
6: Thread.Sleep(1000);
7: // Pobieramy wykorzystanie procesora w ciągu ostatniej sekundy
8: Console.WriteLine(pc.NextValue());
Pierwsze wywołanie pc.NextValue zawsze zwróci zero. Dopiero kolejne wywołania zawierają jakieś dane.
Dodawanie własnych liczników
Jeśli chcemy dostarczyć dane dotyczące wydajności, generowane przez naszą aplikację, musimy stworzyć własną kategorię licznika a później dodać licznik do tej kategorii.
Aby utworzyć własną kategorię i pojedyńczy licznik, wywołujemy statyczną metodę PerformanceCounterCategory.Create. Jako parametry przekazujemy nazwę kategorii, opis, nazwę licznik oraz opis licznika. Przykład stworzenia kategorii:
1: PerformanceCounterCategory.Create("CategoryName", "CounterHelp",
2: PerformanceCounterCategoryType.MultiInstance, "CounterName",
3: "CounterHelp");
W trzecim parametrze metody Create określamy czy będzie to pojedyncza instancja czy będzie ich wiele.
Jeśli chcemy dodać wiele liczników do pojedynczej kategorii, tworzymy instancje CounterCreationDataCollection i dodajemy do tej kolekcji kilka obiektów CounterCreationData. Poniżej przykład:
1: CounterCreationDataCollection counters = new CounterCreationDataCollection();
2: counters.Add(new CounterCreationData("Sales",
3: "Number of total sales", PerformanceCounterType.NumberOfItems64));
4:
5: counters.Add(new CounterCreationData("Active Users",
6: "Number of active users", PerformanceCounterType.NumberOfItems64));
7:
8: counters.Add(new CounterCreationData ("Sales value",
9: "Total value of all sales", PerformanceCounterType.NumberOfItems64));
10:
11: PerformanceCounterCategory.Create("MyApp Counters",
12: "Counters describing the performance of MyApp",
13:
14: PerformanceCounterCategoryType.SingleInstance, counters);
Żeby sprawdzić czy kategoria istnieje, używamy PerformanceCounterCategory.Exists. Do usunięcia kategorii używamy PerformanceCounterCategory.Delete.
Dostarczanie danych do licznika
Po utworzeniu własnego licznika, możemy aktualizować dane (jeśli zachodzi taka potrzeba).
Aby zaktualizować dane tworzymy obiekt PerformanceCounter i ustawiamy właściwość ReadOnly na false. Ustawić ją możemy za pomocą przeciążonego konstruktora, który przyjmuje parametr bool.
1: PerformanceCounter pc = new PerformanceCounter(
2: "MyApp Counters", "Sales", false);
Po stworzeniu obiektu PerformanceCounter możemy ustawić wartość bezpośrednio przez właściwość RawValue. Możemy również użyć metod Decrement, Increment oray IncrementBy. w celu zwiększenia bądź zmniejszenia aktualnej wartości.
1: PerformanceCounter pc = new PerformanceCounter(
2: "MyApp Counters", "Sales", false);
3: c.RawValue = 7;
4: c.Decrement();
5: c.Increment();
6: c.IncrementBy(3);
To wszystko w dzisiejszej lekcji. Następny jak zwykle w środę.
Wesołych Świąt :)
Kolejny artykuł z serii to 70-536 Managing Computers