Udostępnij za pośrednictwem


Zbieranie danych wydajności

Po utworzeniu zapytania i dodaniu do niego liczników wywołaj funkcję PdhCollectQueryData, aby pobrać bieżące dane pierwotne dla wszystkich liczników w zapytaniu.

Wiele liczników, takich jak liczniki szybkości, wymaga dwóch próbek danych do obliczenia sformatowanej wartości danych. PdH przechowuje dane dla bieżącej próbki i wcześniej zebranej próbki. Poniższa procedura opisuje sposób zbierania wartości liczników, które wymagają dwóch próbek do obliczenia wartości wyświetlanej.

Aby zebrać wartości liczników, które wymagają dwóch próbek do obliczenia wartości wyświetlanej

  1. Wywołaj pdhCollectQueryData, aby zebrać pierwszy przykład.
  2. Wywołaj funkcję Sleep, aby poczekać co najmniej jedną sekundę między kolekcjami.
  3. Wywołaj pdhCollectQueryData ponownie, aby zebrać drugi przykład.
  4. Wywołaj funkcję PdhGetFormattedCounterValue, aby obliczyć wartość wyświetlaną.
  5. Powtórz kroki od 2 do 4.

Alternatywą dla samodzielnego zaimplementowania okresu oczekiwania może być wywołanie funkcji PdhCollectQueryDataEx, która tworzy wątek chronometrażu, który czeka określoną ilość czasu, zbiera przykład, a następnie wyzwala zdarzenie zdefiniowane przez aplikację.

Jeśli chcesz wykonywać zapytania dotyczące danych wydajności z pliku dziennika, możesz również zdefiniować zakres czasu. Zakres czasu ogranicza zapytanie do tych próbek, które zostały zebrane w określonym przedziale czasowym (każda próbka zawiera znacznik czasowy dla momentu zebrania). Aby uzyskać więcej informacji na temat ustawiania i pobierania zakresów czasu, zobacz Ustawianie zakresu czasu dla zapytania.

Jeśli chcesz zebrać dane wydajności i zapisać je w pliku dziennika, wywołasz funkcję PdhUpdateLog zamiast wywoływać funkcję PdhCollectQueryData. Aby uzyskać szczegółowe informacje, zobacz Praca z plikami dziennika i zapisywanie danych wydajności w pliku dziennika.

Aby uzyskać szczegółowe informacje na temat obliczania wyświetlanej wartości próbki, zobacz Wyświetlanie danych wydajności.

Zrozumienie liczników procesorów wielordzeniowych

Niektóre liczniki wydajności zostały zaprojektowane dla systemów pojedynczego procesora i mogą nie być dokładne dla komputerów wieloprocesorowych. Na przykład proces jest ograniczony do 100 procent pojedynczego procesora; jednak jego wątki mogą używać kilku procesorów, łącznie ponad 100 procent.

Wartość licznika "\Processor(_Total)\% Processor Time" to średnie użycie wszystkich procesorów. Jeśli na przykład masz dwa procesory, jeden na 100 procent, a drugi na 0 procent, ten licznik zgłosi 50 procent. Dlatego zakres wynosi od 0 do 100.

"\Process(X)\% Czas procesora" (gdzie X jest nazwą procesu), wartość licznika jest sumą użycia procesora przez wszystkie wątki procesu X. Na przykład w komputerze z dwoma procesorami, jeśli proces ma dwa wątki, jeden zajmuje 75 procent procesora CPU, a drugi przyjmuje 80 procent innego procesora CPU, ten licznik zgłosi 155 procent. Zakres dla tego licznika wynosi od 0 do 100 * ProcessorCount.

Podczas używania zestawu liczników Process można uzyskiwać wartości poza oczekiwanym zakresem wartości użycia procesora. Aby obliczyć procent użycia procesora CPU, PDH potrzebuje dwóch próbek (z których każda ma wartość nieprzetworzoną i sygnaturę czasową). Ponieważ PDH używa tylko nazwy wystąpienia do kojarzenia procesów, czasami może mieszać próbki z różnych procesów. Na przykład jeśli próbkowane są trzy procesy o tej samej nazwie wystąpienia, a jeden z procesów zostanie zakończony po trzecim przykładzie, inny proces zostanie przeniesiony do miejsca opuszczonego przez ten zakończony proces. W związku z tym sformatowany licznik będzie dostarczać niepoprawną wartość podczas formatowania czwartej próbki, ponieważ używa trzeciej próbki z zakończonego procesu i czwartej próbki z procesu, który zajął miejsce zakończonego procesu.

W poniższej tabeli przedstawiono, jak można to zrobić, jeśli proces zostanie zakończony podczas zbierania danych. W tabeli przedstawiono pięć próbek wartości licznika dla trzech wystąpień procesu X. Próbki są zbierane w ciągu jednej sekundy. Po zebraniu trzeciego przykładu proces X w miejscu 1 zostanie zakończony. Po zakończeniu procesu X w miejscu 1 proces X w miejscu 2 przechodzi do miejsca 1. Po zebraniu czwartego przykładu dla procesu X w miejscu 2 pierwsza wartość wynosi teraz 20 zamiast 1000, a druga wartość to 1500. Podczas formatowania wartości licznika uzyskasz 1480 milisekund zamiast oczekiwanych 500 milisekund. Podczas formatowania piątej przykładowej wartości należy uzyskać oczekiwaną wartość.

Próbka Gniazdo 0 dla procesu X Gniazdo 1 dla procesu X Gniazdo 2 dla procesu X
Przykład 1 0 0 0
Przykład 2 20 10 500
Przykład 3 40 20 1,000
Przykład 4 60 1500 (z poprzedniego slotu 2) Nie dotyczy. Teraz zebrane w slocie 1.
Przykład 5 80 2 000 Nie dotyczy. Teraz zostało zebrane w gnieździe 1.

Napiwek

Począwszy od systemu Windows 11, można uniknąć tego problemu, używając nowego Process V2 kontrasetu. Licznik Process V2 zawiera identyfikator procesu w nazwie instancji. Dzięki temu można uniknąć niespójnych wyników pojawiających się przy użyciu oryginalnego zestawu Process.