2010-02-03 16 views
13

Mam proces serwisowania i chcę używać liczników wydajności do publikowania średniego czasu potrzebnego na wykonanie zadań. Do tego celu używam licznika AverageTimer32.Obliczanie średnich z licznikami wydajności

Działa prawie tak, jak chcę, ale nie całkiem: Kiedy zwiększam licznik, będzie on krótko podnosił się do wartości, której się spodziewam (obserwując w Monitorze wydajności), ale następnie spada z powrotem do zera.

Tak więc licznik jest zerowy, uruchamiam zadanie, zadanie się kończy, licznik krótko podskakuje (do prawidłowej wartości), ale potem prawie natychmiast wraca do zera.

Używam licznika AverageTimer32 ze średnią bazą jako mianownikiem. Zwiększam AverageBase o 1 za każdym razem, gdy uruchamiam zadanie, a następnie zwiększam AverageTimer32 o liczbę ticków, które należy ukończyć za każdym razem, gdy skończę zadanie. Czy ktoś może mnie popchnąć?

Odpowiedz

16

Okazuje się, że powodem, dla którego nie mogłem zrobić tego, co chciałem, było to, że żaden z typów liczników wydajności nie przewidywał automatycznego obliczania średniej bieżącej. ("średnie" liczniki, oblicz średnią w oparciu o ten moment w czasie, np. "bajty na sekundę").

Chciałem średniej bieżącej. Tak więc użyłem typu licznika wydajności RawFraction.

Był jeden problem z tą metodą: Formuła dzieli wynik przez 100, aby wytworzyć wartość procentową, a ja chciałem liczbę nieprzetworzoną (średnie operacje zakończone na sekundę).

Tak, I zwiększałem mianownik frakcji o 100 dla każdej 1 operacji (kompensując obliczenia procentowe).

Mój wynik: mogę teraz wyświetlić, ile czasu zajmuje średnio ukończenie zadania przez moją służbę. Jeśli moja usługa nie jest zajęta, średnia pozostaje stała, dzięki czemu możesz zobaczyć długoterminowy trend wydajności mojej usługi.

+0

Miałem ten sam problem, próbowałem używać AverageCount64, AverageTime32, ale na próżno. Dziękuję za odpowiedź na własne pytanie i udzielenie wyjaśnień. –

+0

+1 To działało również dla mnie. Doskonały! –