我需要在Windows中对.NET程序(C#)进行一些性能基准测试,但我还没有在Windows世界中做过很多基准测试。我已经开始使用带有自定义计数器的Windows 2000 / XP性能监视器,但我认为这不是我想要的。
在Windows XP中是否有适当的系统功能,或者我是否需要使用System.Diagnostics.Stopwatch [编辑]并编写文本日志以进行手动解释,还是有其他的东西?
编辑:除System.Diagnostics.Stopwatch
之外还有什么吗?
答案 0 :(得分:8)
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");
答案 1 :(得分:5)
对于微基准测试,我非常喜欢MeasureIt(可以从http://msdn.microsoft.com/en-us/magazine/cc500596.aspx下载)。这是由CLR的性能架构师Vance Morrison编写的测试项目。它目前为许多.Net / CLR核心方法提供了一套很好的基准。最好的部分是,无论你想测试什么,调整和添加新基准都是微不足道的。只需运行“MeasureIt / edit”,它就会自动启动VS项目,以便您可以查看这些基准测试的编写方式,并以类似的方式添加新的基准测试。
正如已经说过的,StopWatch可能是最简单的方法,MeasureIt使用下面的StopWatch作为其时间,但它也做了一些其他的事情,比如运行一段代码X次,然后为你提供运行的统计数据,什么不是
答案 2 :(得分:4)
那里有很多个人。以下是我所知道的一些内容:
如果继续使用System.Diagnostics.Stopwatch,您将能够只测量和测量代码中的特定点,您可以明确地放置开始/停止。这足以测量特定的部分,比如紧凑的循环或类似的东西,但它不会让你全面了解你的程序花费大部分时间的位置。
答案 3 :(得分:4)
如果您只想要一些快速数字,可以使用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
答案 4 :(得分:3)
这可能不是您想要的,但dotTrace提供了许多有用的诊断并集成到Visual Studio中。
答案 5 :(得分:1)
如果你的项目很大并且有很多模块在进行大量的通话,你可以: http://www.moduleanalyzer.com/