2010-02-03 4 views
13

Je dispose d'un processus de service et je souhaite utiliser les compteurs de performance pour publier le temps moyen nécessaire pour effectuer les tâches. J'utilise le compteur AverageTimer32 pour le faire. Il fonctionne presque comme je le veux, mais pas tout à fait: quand j'incrémente le compteur, il augmente brièvement à la valeur attendue (en regardant dans Performance Monitor), mais il redescend immédiatement à zéro.Calcul des moyennes avec des compteurs de performance

Donc, le compteur est zéro, je lance une tâche, la tâche se termine, le compteur remonte brièvement (à la bonne valeur), mais il revient presque immédiatement à zéro. J'utilise le compteur AverageTimer32 avec une AverageBase comme dénominateur. J'augmente le AverageBase de 1 chaque fois que je lance une tâche, puis j'augmente le AverageTimer32 du nombre de ticks à compléter chaque fois que je termine la tâche. Quelqu'un peut-il me pousser?

Répondre

16

Il se trouve que la raison pour laquelle je ne pouvais pas faire ce que je voulais était qu'aucun des types de compteurs de performance ne prévoit de calculer automatiquement une moyenne courante. (les compteurs "moyens", calculent une moyenne basée sur ce moment dans le temps, comme "octets par seconde").

Je voulais une moyenne courante. J'ai donc utilisé le type de compteur de performance RawFraction.

Il y avait un problème avec cette méthode: La formule divise le résultat par 100 pour produire un pourcentage, et je voulais un nombre brut (opérations moyennes terminées par seconde). Donc, j'ai incrémenté le dénominateur de la fraction de 100 pour chaque 1 opération (décalage du calcul de pourcentage).

Mon résultat: Je peux maintenant afficher le temps moyen, en moyenne, pour que mon service effectue une tâche. Si mon service n'est pas occupé, la moyenne reste constante afin que vous puissiez voir la tendance à long terme de la performance de mon service.

+0

J'ai eu le même problème, j'ai essayé d'utiliser AverageCount64, AverageTime32 mais en vain. Merci d'avoir répondu à votre question et d'avoir fourni l'explication. –

+0

+1 Cela a fonctionné pour moi aussi. Excellent! –

Questions connexes