性能计数器值检索
更新:2007 年 11 月
有几种方法可以读取性能计数器的值:
通过使用 PerformanceCounter 类的 RawValue 属性,可以从计数器中检索原始值。
通过使用 PerformanceCounter 类的 NextValue 方法,可以检索计数器的当前计算所得值。
可以使用 PerformanceCounter 类的 NextValue 方法检索一组样本,然后使用 Calculate 方法比较它们的值。
说明:
有些安全限制会影响您使用性能计数器的能力。有关更多信息,请参见监视性能阈值的介绍。
原始、计算和取样数据
一旦您理解原始值和计算值不断发生变化,而取样则使您得以在某个特定时刻检索计数器的静态快照,原始值、下一值(计算值)和取样之间的交互就变得浅显易懂了。下面的关系图阐释原始值、下一值和取样之间的关系。
性能计数器值:原始、计算和取样
这张图片显示名为 Orders Per Second(每秒的订单数)的计数器中所含数据的表示形式。该计数器的原始值是每隔一秒发生变化的单个数据点,它们计算后所得的平均值由线条表示,该线条显示一段时间中订单接收量的增长。在该图表中采用了以下数据点:
用户使用 NextValue 方法检索到了三个不同时间的计算值,分别由 NV1、NV2 和 NV3 表示。因为下一值的不断变化,所以不用指定任何附加参数就能每次检索到一个不同的值。
用户使用 NextSample 方法获得了两个样本,分别由 S1 和 S2 表示。取样将某个时间的值冻结,以便用户能比较两个取样值,并对它们进行计算。
对比检索方法
使用 RawValue 属性检索原始值非常快,因为不执行任何计算或比较。例如,如果您只是要用计数器统计系统中处理的订单量,就可以检索计数器的原始值。有关检索原始值的更多信息,请参见如何:检索原始性能计数器值。
使用 NextValue 方法检索计算值通常比检索原始值更有用,但该值也可能使您对数据的观察不符合实际,因为它会反映对值进行计算的那一刻数据的异常波动。例如,如果您有一个计数器计算每秒钟处理的订单量,某个特定时刻处理的异常高或异常低的订单量会得出一个相对于一段时间并不符合实际的平均值。这可能会歪曲系统的实际性能。有关检索计算值的更多信息,请参见如何:检索计算所得的性能计数器值。
取样允许您检索、保留和比较一段时间中的各种值,从而呈现系统中数据的最切合实际的画面。如果需要比较不同计数器中的值或者需要基于原始数据计算一个值,可以使用 NextSample 方法检索样本。但是此方法占用的资源略多于 NextValue 调用。有关检索样本的更多信息,请参见如何:检索性能计数器样本。
NextSample 方法返回一个 CounterSample 类型的对象。检索样本时,可以访问 CounterSample 类的属性,如 RawValue、BaseValue、TimeStamp 和 SystemFrequency。这些属性使您对构成取样数据的数据有详细的了解。