什么是性能指标?

时间:2010-09-24 15:27:53

标签: .net performancecounter

性能计数器到底是什么以及它们如何工作?它们是Windows专用的还是操作系统级概念,也可以在Linux等上使用?

如何在我的.NET应用程序中使用它们来测量应用程序各个部分的执行时间?

我用Google搜索,但令人惊讶的是没有找到任何好的参考资料。

2 个答案:

答案 0 :(得分:2)

作为一个概念,性能计数器是可测量的,可报告的度量标准,内核或应用程序可以向操作系统报告。认为CPU负载,内存使用,网络带宽等是性能计数器的示例。它不仅仅基于硬件; Web服务器可以报告它正在处理的会话数,或者数据库服务器可以报告连接数和查询数/秒。至少在Windows中,您可以为您的应用程序创建自己的应用程序;如果您有一个服务器应用程序将输入文件处理到数据库中,您可以让它以文件/秒或KB /秒为单位报告其吞吐量。您可以连续数小时报告服务器正常运行时间,也可以按安装后的时间百分比报告。

如何根据您的开发环境(语言,框架,库)和目标操作系统,访问或创建性能计数器的方式会有很大差异,但我想不出现代内核至少无法报告硬件表现数字。

答案 1 :(得分:1)

.Net中的性能计数器特定于Windows。我不认为使用性能计数器来衡量执行时间是一个很好的方法,它会使事情变得比我怀疑的更复杂。 Visual Studio包含一个性能工具,如果您转到View - OtherWindows - Performance Explorer菜单,则会出现性能资源管理器窗口,您可以单击“启动性能向导”按钮。   另一种可能性是使用秒表类,如果您的计算机有一个,它将使用高分辨率计时器:

        Int64 nanoSecPerTick = (1000L * 1000L * 1000L) / Stopwatch.Frequency;
        Stopwatch timer = Stopwatch.StartNew();
        // execute the code that you want to time
        timer.Stop();
        Int64 nanoSec = timer.ElapsedTicks / nanoSecPerTick;
        // or if you don't need such fine grained timing:
        Int64 milliSec = timer.ElapsedMilliseconds;
        Console.Write("Elapsed time: " + nanoSec + "ns");