.NET秒表 - 性能损失

Ahm*_*tun 46 .net c# stopwatch

可能重复:
DateTime.Now是测量函数性能的最佳方法吗?
秒表与使用System.DateTime.Now进行计时事件

我的代码需要尽可能快地运行.为了能够记录执行时间,我使用了秒表类.我怀疑,秒表可能会以糟糕的方式影响表现.也许使用DateTime差异可能更有效?

你认为哪一个有更好的表现?

Stopwatch sw = new Stopwatch();
sw.Start();
int a = 5;

// Critical lines of code

long elapsedMs = se.Elapsed.TotalMilliseconds;
Run Code Online (Sandbox Code Playgroud)

要么

DateTime startDate = DateTime.Now;
int a = 5;

// Critical lines of code

long elapsedMs = DateTime.Now.Subtract(startDate).TotalMilleseconds;
Run Code Online (Sandbox Code Playgroud)

Tho*_*que 68

Stopwatch没有做任何事情的调用之间StartStop...这只是存储当前时间戳(通过QueryPerformanceCounter)当您启动它,当你停止它,它比较当前的时间戳.所以没有理由它会影响代码的性能,至少不会显着.Stopwatch专为精确时间测量而设计,因此您可以确保它经过彻底优化.它也比比较连续值更准确DateTime.Now....

  • 问题还在于Stopwatch在Start()和Stop()调用中做了什么以及它如何影响应用程序.VS2013性能分析器显示Stopwatch.Stop()浪费了大约0.92%(应用程序在每个之前执行80000个sql查询,1个线程,sw.Start()/ sw.Stop()) (3认同)

Cod*_*aos 9

由于您的分析代码只执行一次,因此其性能影响应该可以忽略不计.如果你在内循环/关键代码路径中调用秒表,这只是一个问题.

GetTickCount()应该是最快速的配置方式之一,但它只有几毫秒的精度.在GetTickCount()Windows API函数也只检查一个简单的变量(这是每隔几毫秒更新一次); 它的成本是本机方法调用的成本,仅此而已.它暴露Environment.TickCount.NET中.但正如我所说,我怀疑这很重要.DateTime.UtcNow/Now具有相同(低)的精度GetTickCount.

理论上,可能会对抖动产生一些影响,但这不太可能.