我需要在Windows上对.NET程序(C#)进行一些性能基准测试,但我在Windows世界中并没有做过基准测试。我研究了使用Windows 2000/XP性能监视器和自定义计数器来进行基准测试,但我认为这不是我想要的。
在Windows XP中是否有任何好的系统设施可以用于此,或者我只需使用System.Diagnostics.Stopwatch [edit]并编写文本日志以供手动解释,还是有其他方法?
编辑:除了System.Diagnostics.Stopwatch之外还有什么吗?
在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");
对于微基准测试,我非常喜欢MeasureIt(可以从http://msdn.microsoft.com/en-us/magazine/cc500596.aspx下载)。这是由CLR上的性能架构师Vance Morrison编写的测试项目。它目前具有许多.Net/CLR核心方法的良好基准测试。最好的部分是它很容易进行调整并添加新的基准测试,以便您想要测试的任何内容。只需运行“MeasureIt /edit”,它将启动VS并为其自身提供项目,以便您可以查看如何编写这些基准测试并按类似方式添加新的基准测试。
如已经说明的那样,StopWatch可能是最简单的方法,并且MeasureIt在计时方面使用了StopWatch,但它还做了其他一些事情,例如运行一段代码X次,然后为运行提供统计信息等。
如果您只需要一些快速的数字,可以使用Powershell来计时整个执行过程。使用measure-command cmdlet。它大致相当于Unix中的"time"。
> 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