我的代码运行多长时间?

Vah*_*d.m 9 c# performance benchmarking

我怎样才能知道我的C#代码运行了多长时间?

Nol*_*rin 14

Stopwatch类.NET提供高精度授时.它能够以大约100纳秒(几分之一毫秒)的灵敏度测量时间.要获得精确的分辨率,请阅读值Stopwatch.Frequency.

var timer = System.Diagnostics.Stopwatch.StartNew();
// Run code here.
var elapsed = timer.ElapsedMilliseconds.
Run Code Online (Sandbox Code Playgroud)

此外,请务必重复运行代码(尽可能多次)以获得更好的平均时间,以及减少CPU负载波动的影响.


Fre*_*örk 14

查看Stopwatch课程:

Stopwatch sw = new Stopwatch();
sw.Start();

// your code here

sw.Stop();
TimeSpan elapsedTime = sw.Elapsed;
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 8

正如其他人所说,这个Stopwatch课程对于简单的计时方面是有益的.其他要记住的部分:

  • 您的代码可能会生成在您停止秒表后需要进行垃圾回收的对象
  • 相反,您的计时可能包括其他对象被垃圾收集,即使它们与您的代码无关
  • 如果您在第一次运行方法之前开始计时,它将包括JIT时间
  • 如果你花费很短的时间,这会导致非常不可预测的结果 - 对于基准测试,我倾向于选择运行代码很多秒,以便考虑应用程序被其他进程等中断.

如果你对基准测试感兴趣,我有MiniBench项目,我必须在某个时候再次开始工作 - 它不是我希望它最终结束的地方,但它是一个开始.我在这篇博文中更多地讨论了我想用它实现的目标.