正确使用“%GC in GC”性能计数器

我试图以编程方式在“.NET CLR Memory”类别中获得“GC中的%time”性能计数器。

根据PerfMon的描述,

GC中的%时间是自上一个GC循环以来执行垃圾收集(GC)所花费的时间百分比。 此计数器通常表示垃圾收集器代表应用程序收集和压缩内存所做的工作。 此计数器仅在每个GC结束时更新,计数器值反映最后观察到的值; 它不是一般的。

所以根据这个描述,我的理解是我必须定期获得性能计数器并自己计算平均值。

我获得性能计数器的方式是

string category = ".NET CLR Memory"; string counter = "% Time in GC"; string instance = Process.GetCurrentProcess().ProcessName; PerformanceCounter gcPerf; // make sure the performance counter is available to query if (PerformanceCounterCategory.Exists(category) && PerformanceCounterCategory.CounterExists(counter, category) && PerformanceCounterCategory.InstanceExists(instance, category)) { gcPerf = new PerformanceCounter(category, counter, instance); } 

但是,当我查看http://msdn.microsoft.com/en-us/library/xb29hack(v=vs.90).aspx时 ,我的理解是gcPerf.NextValue()将进行抽样并计算平均值为了你。

那么究竟什么才能正确使用“GC中的%时间”? 调用gcPerf.NextValue()是否返回自上次调用该方法以来的平均值?