技术开发 频道

VS与Win7共舞:性能计数器进行性能分析

  在这里,我们演示一下如何在应用程序中使用这些系统提供的性能计数器。首先,我们新建一个基于Visual C#的Windows窗体应用程序。然后,展开Server Explorer(服务器浏览器) 中的“Memory”(内存)节点,然后展开“Available Mbytes”(可用M字节)计数器,将该计数器拖到我们的应用程序中的新 Windows 窗体上。接着,我们在窗体上放置一个计时器并在其属性中启用这个计时器,这个计时器主要用于定时向性能计数器查询当前可用的内存,然后将这个值更新到界面上。最后,我们用一个Label标签来显示性能计数器中查询所得的当前可用内存数。整个窗体设计如下:

  图4 在应用程序中使用性能计数器

  完成Windows窗体的设计后,我们就可以在计时器的响应函数中,向我们使用的性能计数器查询当前可用内存数,并将这个数值更新到窗体的Label文本中:

private void timer1_Tick(object sender, EventArgs e)
        {
            
// 查询性能计数器并更新Label文本
            label1.Text = performanceCounter1.NextValue().ToString();
        }

  这样,当我们编译运行这个应用程序时,就可以通过性能计数器实时地得到当前系统可用内存数了:

  图5 性能计数器实例

        当然,这里只是一个非常简单的示例,在实际的应用程序中,我们不可能这么简单的使用性能计数器。但是这个实例却向我们演示了如何向我们自己的应用程序中添加系统定义的性能计数器,以监控和查询系统性能对象的信息。在实际应用中,我们可以根据某个系统性能对象的状态而采取某种行动,比如当系统的可用内存比较少的时候,我们可以减少程序的并发线程数;当笔记本的电池电量较低的时候,我们甚至可以采取自我保护,提示用户保存当前的工作成果等等。合理地使用这些系统信息,可以使得应用程序的性能更加优化,交互更加人性化。

  自定义性能计数器

  在很多情况下,除了直接使用系统提供的各种性能计数器获取系统信息之外,我们还希望可以添加自定义的性能计数器,以监视我们的应用程序中对性能影响比较大的某些因素。在Visual Studio 2010中,除了使用Server Explorer(服务器浏览器)提供的各种性能计数器之外,实际上,我们还可以通过使用System.Diagnostics名字空间中的PerformanceCounterCategory,CounterCreationDataCollection和PerformanceCounter这些类,完全以代码的形式为我们自己的应用程序添加自定义的计数器类别和性能计数器。当 PerformanceCounter 和 Windows 性能监视器结合使用时,就像一个医生(你自己)拿着听诊器(Windows性能监视器)来诊断你的应用程序(PerformanceCounter)一样,随时将你的应用程序的内部情况在性能监视器中反应出来,应用程序中哪里问题,哪里是性能瓶颈,一目了然。

  在这里,我们以一个复制文件的应用程序为例,使用性能计数器来监视当前所复制的文件数目以及完成总进度的百分比。首先,我们新创建一个基于Visual C#的Windows Form应用程序,并设计窗体如下:

  图6 复制文件应用程序

0
相关文章