什么是性能计数器?
Posted
技术标签:
【中文标题】什么是性能计数器?【英文标题】:What are performance counters? 【发布时间】:2010-09-24 15:27:52 【问题描述】:什么是性能计数器,它们是如何工作的?它们是特定于 Windows 的,还是操作系统级别的概念,也可用于 Linux 等?
如何在我的 .NET 应用程序中使用它们来测量我的应用程序各个部分的执行时间?
我用谷歌搜索,但令人惊讶的是没有找到任何很好的参考资料。
【问题讨论】:
【参考方案1】:作为一个概念,性能计数器是内核或应用程序可以向操作系统报告的可测量、可报告的指标。 CPU负载、内存使用、网络带宽等都是性能计数器的例子。它不仅仅是基于硬件的。网络服务器可以报告它正在处理的会话数,或者数据库服务器可以报告连接数和查询/秒。至少在 Windows 中,您可以为您的应用程序创建自己的;如果您有一个将输入文件处理到数据库中的服务器应用程序,您可以让它以文件/秒或 KB/秒为单位报告其吞吐量。您可以按连续数小时报告服务器正常运行时间,也可以按安装时间百分比报告。
根据您的开发环境(语言、框架、库)和目标操作系统,您访问或创建性能计数器的方式会有很大差异,但我想不出一个至少不能报告硬件的现代内核性能数据。
【讨论】:
【参考方案2】:.Net 中的性能计数器特定于 Windows。我不认为使用性能计数器来测量执行时间是一个好方法,它会使事情变得比我怀疑的更复杂。 Visual Studio 包含一个性能工具,如果您转到 View - OtherWindows - Performance Explorer 菜单,性能浏览器窗口会出现,您可以单击 Launch Performance Wizard 按钮。 另一种可能性是使用 Stopwatch 类,如果您的计算机有一个,它将使用高分辨率计时器:
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");
【讨论】:
你提到的性能工具只有Premium或Ultimate版本。以上是关于什么是性能计数器?的主要内容,如果未能解决你的问题,请参考以下文章