在Windows中对程序进行基准测试的最佳方法是什么?

时间:2020-03-06 14:50:19  来源:igfitidea点击:

我需要在Windows中的.NET程序(C#)上执行一些性能基准测试,但在Windows世界中并没有做太多基准测试。我已经考虑将Windows 2000 / XP Performance Monitor与自定义计数器一起使用,但是我认为这不是我想要的。

在Windows XP中是否有用于此目的的良好系统设施,还是仅需要使用System.Diagnostics.Stopwatch [edit]并编写文本日志以进行手动解释,或者还有其他功能吗?

编辑:除了System.Diagnostics.Stopwatch还有什么?

解决方案

using System.Diagnostics;
....

Stopwatch sw = new Stopwatch();

sw.Start();

// Code you want to time...

// Note: for averaged accuracy (without other OS effects), 
//       run timed code multiple times in a loop 
//       and then divide by the number of runs.

sw.Stop();

Console.WriteLine("Took " + sw.ElapsedTicks + " Ticks");

这可能不是我们想要的,但是dotTrace提供了许多有用的诊断程序,并已集成到Visual Studio中。

那里有很多探查器。这是我所知道的一些:

  • 红门的蚂蚁
  • Yourkit的.Net Profiler
  • JetBrains dotTrace

如果继续使用System.Diagnostics.Stopwatch,我们将只能检测和测量代码的特定点,在这些点上明确放置"开始/停止"。这对于测量特定部分(例如紧密循环或者类似的东西)已经足够好了,但是它并不能为我们提供程序大部分时间花在哪里的完整图片。

对于微基准测试,我真的很喜欢MeasureIt(可以从http://msdn.microsoft.com/zh-cn/magazine/cc500596.aspx下载)。这是CLR的性能架构师Vance Morrison编写的测试项目。目前,它为许多.Net / CLR核心方法提供了一套不错的基准。最好的部分是,微调并为我们要测试的任何内容添加新的基准。只需运行" MeasureIt / edit",它就会为项目本身启动VS,以便我们可以查看这些基准的编写方式,并且可以根据需要以类似的方式添加新基准。

如前所述,StopWatch可能是执行此操作的最简单方法,而MeasureIt在其定时下使用StopWatch,但它还执行其他一些操作,例如将代码块运行X次,然后为运行提供统计信息,而不是提供统计信息。

如果只需要一些快速数字,则可以使用Powershell来计时整体执行时间。使用measure-command cmdlet。它大致相当于Unix中的"时间"。

> measure-command { your.exe arg1 }

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 4
Milliseconds      : 996
Ticks             : 49963029
TotalDays         : 5.78275798611111E-05
TotalHours        : 0.00138786191666667
TotalMinutes      : 0.083271715
TotalSeconds      : 4.9963029
TotalMilliseconds : 4996.3029

如果项目很大,并且有许多模块可以进行大量调用,那么我们可以:
http://www.moduleanalyzer.com/