WCF サービス インターフェイスを介していくつかの仮想キューのメッセージを提供する Windows サービスがあります。2 つのパフォーマンス カウンターを公開したかった -
- キューにあるアイテムの数
 - 1 秒あたりのキューから削除されたアイテムの数
 
最初のものは正常に動作し、RawValue が正しいように見えるにもかかわらず、2 番目のものは PerfMon.exe で常に 0 として表示されます。
私はそのようにカウンターを作成しています-
    internal const string PERF_COUNTERS_CATEGORY = "HRG.Test.GDSSimulator";
    internal const string PERF_COUNTER_ITEMSINQUEUE_COUNTER = "# Messages on queue";
    internal const string PERF_COUNTER_PNR_PER_SECOND_COUNTER = "# Messages read / sec";
if (!PerformanceCounterCategory.Exists(PERF_COUNTERS_CATEGORY))
{
    System.Diagnostics.Trace.WriteLine("Creating performance counter category: " + PERF_COUNTERS_CATEGORY);
    CounterCreationDataCollection counters = new CounterCreationDataCollection();
    CounterCreationData numberOfMessagesCounter = new CounterCreationData();
    numberOfMessagesCounter.CounterHelp = "This counter provides the number of messages exist in each simulated queue";
    numberOfMessagesCounter.CounterName = PERF_COUNTER_ITEMSINQUEUE_COUNTER;
    numberOfMessagesCounter.CounterType = PerformanceCounterType.NumberOfItems32;
    counters.Add(numberOfMessagesCounter);
    CounterCreationData messagesPerSecondCounter= new CounterCreationData();
    messagesPerSecondCounter.CounterHelp = "This counter provides the number of messages read from the queue per second";
    messagesPerSecondCounter.CounterName = PERF_COUNTER_PNR_PER_SECOND_COUNTER;
    messagesPerSecondCounter.CounterType = PerformanceCounterType.RateOfCountsPerSecond32;
    counters.Add(messagesPerSecondCounter);
    PerformanceCounterCategory.Create(PERF_COUNTERS_CATEGORY, "HRG Queue Simulator performance counters", PerformanceCounterCategoryType.MultiInstance,counters);
}
次に、各サービス コールで、関連するカウンターをインクリメントします。現在、1 秒あたりのカウンターは次のようになっています。
messagesPerSecCounter = new PerformanceCounter();
messagesPerSecCounter.CategoryName = QueueSimulator.PERF_COUNTERS_CATEGORY;
messagesPerSecCounter.CounterName = QueueSimulator.PERF_COUNTER_PNR_PER_SECOND_COUNTER;
messagesPerSecCounter.MachineName = ".";
messagesPerSecCounter.InstanceName = this.ToString().ToLower();
messagesPerSecCounter.ReadOnly = false;
messagesPerSecCounter.Increment();
前述のように、increment の呼び出しの後にブレークポイントを配置すると、サービスへの呼び出しと一致して、RawValue が絶えず増加していることがわかります (かなり頻繁に、1 秒に 1 回以上だと思います)。しかし、パフォーマンス カウンター自体はオンのままです。 0.
「キュー」の項目数を提供するパフォーマンス カウンターは、同じ方法で実装されます (ただし、Increment を呼び出すのではなく、RawValue を割り当てます)。
私は何が欠けていますか?