6

我需要对 Windows 中的 .NET 程序 (C#) 进行一些性能基准测试,但在 Windows 世界中我还没有做太多的基准测试。我已经研究过为此使用带有自定义计数器的 Windows 2000/XP 性能监视器,但我认为这不是我想要的。

在 Windows XP 中是否有任何好的系统工具,或者我只需要使用 System.Diagnostics.Stopwatch [编辑] 并编写文本日志以进行手动解释,还是还有其他什么?

编辑:还有什么超出的System.Diagnostics.Stopwatch吗?

4

6 回答 6

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");
于 2008-09-28T03:17:30.020 回答
5

对于微基准测试,我非常喜欢 MeasureIt(可以从http://msdn.microsoft.com/en-us/magazine/cc500596.aspx下载)。这是一个测试项目,由 CLR 的性能架构师 Vance Morrison 编写。它目前为许多 .Net/CLR 核心方法提供了一套很好的基准。它最好的部分是,为你想测试的任何东西调整和添加新的基准是微不足道的。只需运行“MeasureIt /edit”,它就会为自己的项目启动 VS,这样您就可以查看这些基准是如何编写的,并根据需要以类似的方式添加新的基准。

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

于 2008-09-28T18:58:07.153 回答
4

那里有很多分析器。以下是我所知道的一些:

如果您继续使用 System.Diagnostics.Stopwatch,您将能够仅检测和测量代码的特定点,在这些点您明确放置 Start/Stop。这对于测量特定的部分已经足够了,比如一个紧密的循环或类似的东西,但它不会让你完整地了解你的程序大部分时间都花在了哪里。

于 2008-09-28T06:04:35.017 回答
4

如果你只想要一些快速的数字,你可以使用 Powershell 来计算整体执行时间。使用测量命令 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
于 2009-09-30T21:59:27.713 回答
3

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

于 2008-09-28T03:35:07.810 回答
1

如果您的项目很大并且有很多模块在进行大量调用,您可以: http ://www.moduleanalyzer.com/

于 2010-11-15T18:49:17.963 回答