2010-03-10 25 views
18

我正在为我的c#项目添加一些性能计数器,并且正在创建一个新的PerformanceCounterCategory。在这个类别中,我想要有多个跟踪不同事物的计数器/定时器。我需要使用多个平均计时器,并试图了解在CoutnerCreationDataCollection中有多个计数器时,AverageBase计数器如何与正确的AverageTimer32计数器关联。性能计数器平均计时器如何与其基数关联?

几个问题:
1.首先,这是做一个正确的方法是什么?我发现的样本都只有一个平均计时器。
2.如果第一个问题的答案是肯定的,那么我是否认为第一个AverageBase计数器添加到AverageTimer32之后的集合中?我确实在文章中找到了需要按顺序添加的参考。

这里是什么,我试图做一个例子:

var dataColl = new CounterCreationDataCollection 
{ 
    new CounterCreationData 
    { 
    CounterType = PerformanceCounterType.AverageTimer32, 
    CounterName = "AverageTime1", 
    CounterHelp = "AverageTime1_Help" 
    }, 
    new CounterCreationData   // Does this get linked to AverageTime1 simply 
            // because it is being added after it? 
    { 
    CounterType = PerformanceCounterType.AverageBase, 
    CounterName = "AverageTime1Base" 
    }, 
    new CounterCreationData 
    { 
    CounterType = PerformanceCounterType.AverageTimer32, 
    CounterName = "AverageTime2", 
    CounterHelp = "AverageTime2_Help" 
    }, 
    new CounterCreationData 
    { 
    CounterType = PerformanceCounterType.AverageBase, 
    CounterName = "AverageTime2_Base" 
    }, 
} 

PerformanceCounterCategory.Create(
          "MyCategoryName" 
          , "My Category Help" 
          , PerformanceCounterCategoryType.SingleInstance 
          , dataColl); 

回答

18

位置。需要基地址的计数器需要立即在定义列表中的基地址后跟踪。所以你的代码是正确的,你有两个AverageTimer32,每个都跟着AverageBase。作为一个方面说明,当你会厌倦重复输入相同的代码时,你应该考虑Using XSLT to generate Performance Counters code