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

上述视图是图表视图,要查看相同数据的文本格式,你可以使用性能监视器提供的‘view report’选项卡。你可以看到该报告显示,从程序开始运行,‘MyFunction的’被调用了9696次。

clip_image014

创建更合理的计数器

在前面的章节中,我们测量了‘MyFunction’被调用的次数。但这样的性能计数并没有真正显示任何的测量价值。最好是,我们也能看到计时器被调用次数,然后我们就能够把计时器被调用的次数和‘MyFunction’被调用的次数做比较。

因此,我们创建一个即时计数器,当定时器触发时递增该计数器。如下面的代码所示。

private void timer1_Tick(object sender, EventArgs e) { perfNumberOfTimeTimerCalled.Increment(); Random objRnd = new Random(); int y = objRnd.Next(1, 5); if (y > 2) { MyFunction(); } }

你可以在下面的图表中可以看到这两个计数器,蓝色的线表示‘MyFunction’被调用的次数,黑色的线表示timer被调用的次数。

clip_image015

如果我们看一下‘report view’,我们也可以看到timer被触发多少次,‘MyFunction’被调用多少次。

clip_image016

平均性能计数器

在前面的章节中,我们用到了2个性能计数器,一个告诉我们timer被触发了多少次,另一个告诉我们‘MyFunction’被调用了多少次。如果我们能有某种平均数据,告诉我们timer每调用一次‘MyFunctionCalled’计数多少次,它将更有意义。

为了得到这些类型的指标,需要用到平均性能计数器。因此,对于我们的场景,我们需要计数函数的调用次数和timer的触发次数。然后,我们需要将他们相除,得到timer每触发一次函数调用多少次。

clip_image017

我们需要添加两个计数器,一个作为分子另一个作为分母。对于作为分子的计数器,我们需要添加‘AverageCount64’类型的计数器,同时为分母,我们需要添加‘AverageBase’类型的计数器。

clip_image018

在‘AverageCount64’类型计数器之后,你需要添加‘AverageBase‘计数器,否则,你会得到一个错误,如下图所示。

clip_image019

我们对于每一个timer触发,我们都对用于记录timer调用的计数器进行递增。

private void timer1_Tick(object sender, EventArgs e) { perfAvgNumberofTimeTimerCalled.Increment(); Random objRnd = new Random(); int y = objRnd.Next(1, 5); if (y > 2) { MyFunction(); } }

为每一次函数调用我们都对用于记录函数调用次数的计数器进行递增

private void MyFunction() { perfNumberOfTimeFunctionCalled.Increment(); }

如果你运行该程序,在view report模式下你应该会看到如下图所示。你可以看到平均‘MyFunction’被调用约0.5次(每timer触发一次)。

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

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