.Net最佳实践3:使用性能计数器收集性能数据 (2)

速率值:- 有些情况下,当你想知道事件相对于时间的比率。例如,你想知道每秒有多少条记录被处理。速率计数器帮助我们计算这些性能指标。

百分比值:- 很多时候,我们想看到以百分比值来作比较。比如你要比较两台计算机之间的性能数据。比较直接的值将不会是一个公平的比较。因此,如果我们能有两台计算机的%值,比较会更有意义。如果我们要比较不同性能计数器的值,百分比是更好的选择,而不是绝对值。

例如,如果你想把RAM使用情况和硬盘空间使用情况做比较。把50GB硬盘使用情况和1GB RAM的使用情况做比较,就如同比较苹果与橘子。如果你使用百分比来表达,这样的比较更公平和合理。百分比性能计数器可以帮助我们以百分比来表达绝对值。

差异值:- 很多时候,我们希望得到差值的性能数据,比如从应用程序开始有多少时间流逝,从应用程序开始有多少硬盘消耗。为了收集这些类型的性能数据,我们需要记录原始值和最新值。为了得到最终的性能数据,我们需要从当前值减去原始值。性能计数器提供差值计数器计算这样的性能数据。

总之,有5种类型的性能计数器,可满足上述所有计数需求。正如下图所表现的:

clip_image005

将用于被性能计数器测试的示例程序

在整篇文章中,我们将用接下来要说明的一个简单的程序作为计数器的例子。在这个例子中,我们将有一个定时器,每隔100毫秒产生一个随机数。这些随机数将被检查看它是否小于2。如果是,那么函数‘MyFunction’将被调用。

clip_image006

下面的代码中,计时器将每100毫秒运行一次并产生随机数,如果随机数小于2则调用‘MyFunction’函数。

private void timer1_Tick(object sender, EventArgs e) { // Generate random number between 1 to 5. Random objRnd = new Random(); int y = objRnd.Next(1, 5); // If random number is less than 2 call my Function if (y > 2) { MyFunction(); } }

下面是\'MyFunction\'函数的代码,它是当随机数的值小于2时被调用的。该方法不会做任何事情。

private void MyFunction() { }

本文中我们所有的性能计数器的例子,将使用上述定义的代码示例。

加入我们的第一个瞬时性能计数器的4个步骤

在我们深入‘如何增加一个性能计数器’这个问题之前,让我们先来了解一下性能计数器的结构。当我们创建性能计数器,它需要被加入某些类别。因此,我们需要创建一个类别,并且把所有性能计数器放在该类别下。

clip_image008

我们来计数‘MyFunction’ 被调用了多少次。首先让我们来创建一个名为“NumberOfTimeFunctionCalled”的即时计数器。在此之前,让我们来看看有多少不同类型的瞬时计数器被性能计数器所支持: -

一下定义摘自:

NumberOfItems32- 即时计数器,它显示最近观测到的值。

NumberOfItems64- 即时计数器,它显示最近观测到的值。 例如,用于维护大量的项或操作的简单计数。 它与 NumberOfItems32 相同,但它使用更大的字段来容纳较大的值。

NumberOfItemsHEX32- 即时计数器,它以十六进制形式显示最近观测到的值。 例如,用于维护项或操作的简单计数。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzxfgy.html