做性能记录的好方法(C#)

时间:2010-01-07 04:49:29

标签: c# logging frameworks performance

我正在尝试从我公司正在开发的应用程序中获取一些详细的性能信息。我想要获取的信息示例包括网络事务需要多长时间,应用程序使用多少CPU /内存,给定方法完成所需的时间等等。

我过去曾尝试过一些失败的尝试(比如尝试使用DateTime.Now来测量小时间段)。最重要的是,我对获取CPU和内存统计信息知之甚少。是否有任何好的.Net类,库或框架可以帮助我收集这类信息和/或将其记录到文本文件中?

5 个答案:

答案 0 :(得分:7)

您要找的是Performance Counters。对于.net,您需要this Performance Counter

答案 1 :(得分:1)

可以在aspect injector上找到建立在https://gitlab.com/hectorjsmith/csharp-performance-recorder之上的独立于平台的开源性能记录器。可以将其添加到任何C#项目中。有关使用方法的说明,请参见Gitlab中的自述文件。

好处

  • 它是面向方面的,这意味着您不必用DateTime乱扔代码。现在-您只需注释适当的方法
  • 它可以漂亮地打印结果-您可以根据自己的喜好进行打印将它们打印到文件中

注释

  • 此性能记录器仅关注方法的时间安排。它不涵盖CPU或内存使用情况。

答案 2 :(得分:0)

性能计数器是一种可行的方法,而System.Diagnostics.Stopwatch类是寻找这种方法的良好基础。

使用性能计数器(超出提供的那些),您将需要管理跟踪事件的基础结构以及报告数据。性能计数器基类提供连接到事件日志的连接详细信息,但如果需要以其他方式(例如日志文件或数据库)报告数据,则需要提供其他报告基础结构。

秒表类是高性能计时器的包装器,根据处理器或平台提供微秒级或纳秒级分辨率。如果您不需要那么高的分辨率,可以使用System.DateTime..Now.Ticks来获取处理器时钟的当前滴答计数,并使用它进行差分数学运算,为大多数操作提供毫秒或更低的精度。

在跟踪CPU统计信息时,请注意在某些情况下,多个处理器和多个核心会使任何准确的统计信息复杂化。

性能计数器的最后一个注意事项,请注意并非所有计算机都在所有计算机上。例如,没有安装IIS的计算机上没有ASP.NET计数器等。

答案 3 :(得分:0)

对于cpu / memory使用性能计数器。有关特定方法(或代码行)和特定对象的更多特定信息,请使用分析器。红门是一个伟大的探测器。

http://www.red-gate.com/products/ants_performance_profiler

答案 4 :(得分:0)

要使现代开源库执行性能指标和监控,请考虑使用应用程序指标。

github:https://github.com/AppMetrics/AppMetrics 网站https://www.app-metrics.io