在Windows中对程序进行基准testing的最佳方式是什么?

我需要在Windows中的.NET程序(C#)上做一些性能基准testing,但是我没有在Windows环境中做很多基准testing。 我已经考虑使用Windows 2000 / XP性能监视器与自定义计数器,但我不认为这是相当我想要的。

在Windows XP中有没有好的系统设备,或者我需要使用System.Diagnostics.Stopwatch [编辑]和写入文本日志手动解释,还是有其他的东西?

编辑:有什么超越System.Diagnostics.Stopwatch

对于微型基准测试,我非常喜欢MeasureIt(可以从http://msdn.microsoft.com/en-us/magazine/cc500596.aspx下载)。 这是一个由Vance Morrison在CLR上担任性能架构师的测试项目。 它目前有一套.Net / CLR核心方法的很好的基准。 最好的部分是微调和添加新的基准,无论你想测试。 只需运行“MeasureIt / edit”,它会自动启动VS,以便您可以查看这些基准是如何编写的,如果您愿意,也可以用类似的方式添加新的基准。

如前所述,StopWatch可能是最简单的方法,MeasureIt使用StopWatch作为其时序,但它也可以执行一些其他的操作,比如运行一段代码X次,然后为运行提供统计信息,而不是。

 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"); 

如果您只需要一些快速数字,则可以使用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 

那里有不少个人介绍。 以下是我所知道的一些:

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

如果继续使用System.Diagnostics.Stopwatch,您将只能测量和测量代码中的特定点,您明确地将Start / Stop放在哪里。 这对于测量特定的部分(比如紧密环路或类似的东西)来说已经足够了,但是这并不能让您全面了解您的程序大部分时间花在哪里。

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

如果你的项目相当大,有很多的模块做大量的电话,你可以: http : //www.moduleanalyzer.com/