我正在努力获得GC中的"%时间"性能计数器" .NET CLR内存"类别编程。
根据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()是否返回自上次调用该方法以来的平均值?