アプリケーション内にインストルメンテーションを実装していますが、PerformanceCounterからWindowsパフォーマンスモニターに表示される値が、記録される値と一致しないという問題が発生しました。
ストップウォッチを使用してメソッドの実行時間を記録し、最初に合計ミリ秒をdoubleとして記録し、次にストップウォッチのTimeSpan.TicksをPerformanceCounterに渡してパフォーマンスモニターに記録します。
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);
次に、記録するために、コレクションから事前に初期化されたカウンターを取得してインクリメントします。
_counters[counter].IncrementBy(timing);
_counters[counterbase].Increment();
...ここで、「タイミング」はストップウォッチのTimeSpan.Ticks値です。
これを実行すると、ストップウォッチのTimeSpanのミリ秒値であるdoubleのコレクションに、1つの値のセットが表示されますが、PerfMonに表示されるのは別の値のセットです。
たとえば...ミリ秒のリストに記録される2つの値は次のとおりです。
23322.675、14230.614
そして、PerfMonグラフに表示されるものは次のとおりです。
15.546、9.930
誰かがこれを説明できますか?