Je suis en train de mettre en œuvre des instruments dans une application et j'ai rencontré un problème où la valeur affichée dans Windows Performance Monitor d'un PerformanceCounter est incompatible avec la valeur enregistrée. J'utilise un chronomètre pour enregistrer la durée d'exécution d'une méthode, puis j'inscrive d'abord le total des millisecondes en double, et ensuite je passe le TimeSpan du chronomètre. J'écris le PerformanceCounter pour l'enregistrer dans le moniteur de performances.Valeurs de temporisateur de compteur de performance inexactes dans Windows Performance Monitor
Création des compteurs de performance dans perfmon:
var datas = new CounterCreationDataCollection();
datas.Add(new CounterCreationData
{
CounterName = name,
CounterType = PerformanceCounterType.AverageTimer32
});
datas.Add(new CounterCreationData
{
CounterName = namebase,
CounterType = PerformanceCounterType.AverageBase
});
PerformanceCounterCategory.Create("Category", "performance data",
PerformanceCounterCategoryType.SingleInstance, datas);
ensuite pour enregistrer i récupérer un compteur pré-initialisation à partir d'une collection et l'incrément:
_counters[counter].IncrementBy(timing);
_counters[counterbase].Increment();
... où "timing" est La valeur TimeSpan.Ticks du chronomètre. Lorsque cela fonctionne, la collection de doubles, qui sont les valeurs en millisecondes pour TimeSpan du Stopwatch, montre un ensemble de valeurs, mais ce qui apparaît dans PerfMon est un ensemble de valeurs différent.
Par exemple ... deux valeurs enregistrées dans la liste des millisecondes sont:
23322,675, 14230,614
Et ce qui apparaît dans le graphique PerfMon sont:
15,546, 9,930
Can quelqu'un explique cela s'il vous plaît?
@krisg - pouvez-vous afficher le code qui place les entrées dans la liste des millisecondes? –