.NET秒表-性能惩罚
本文关键字:惩罚 性能 秒表 NET | 更新日期: 2023-09-27 18:04:45
可能的重复:
是DateTime。现在测量函数的最佳方法';s的表现
秒表与使用System.DateTime.Now计时事件
我有一些代码需要尽可能快地运行。为了能够记录执行时间,我使用了Stopwatch类。我怀疑秒表可能会对演出产生不良影响。也许使用日期时间差可能更有效?
你认为哪一个表现更好?
Stopwatch sw = new Stopwatch();
sw.Start();
int a = 5;
// Critical lines of code
long elapsedMs = se.Elapsed.TotalMilliseconds;
或
DateTime startDate = DateTime.Now;
int a = 5;
// Critical lines of code
long elapsedMs = DateTime.Now.Subtract(startDate).TotalMilleseconds;
Stopwatch
在对Start
和Stop
的调用之间没有执行任何操作。。。它只是在您启动它时存储当前时间戳(通过QueryPerformanceCounter
(,并在您停止它时将其与当前时间戳进行比较。因此,它没有理由会影响代码的性能,至少不会显著影响。Stopwatch
是专门为精确的时间测量而设计的,因此您可以确保它经过了彻底的优化。它也比比较DateTime.Now
的连续值准确得多。。。
由于您的评测代码只执行一次,因此其性能影响应该可以忽略不计。如果你把对秒表的调用放在你的内部循环/关键代码路径中,这只是一个问题。
GetTickCount()
应该是最快的评测方式之一,但它的精度只有几毫秒。GetTickCount()
Windows API函数只检查一个简单变量(每隔几毫秒更新一次(;它的成本是本机方法调用的成本,仅此而已。它在.NET中被公开为Environment.TickCount
。但正如我所说,我怀疑这是否重要。CCD_ 10具有与CCD_ 11相同(低(的精度。
理论上,抖动可能会受到一些影响,但这不太可能。
答案实际上取决于您想要达到的精度。对于大于秒的精度,秒表是一种更好的方法,因为它使用了比日期时间更精确的测量系统。看见http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx
从性能的角度来看,我怀疑Start((和DateTime的差异有多大。现在存储来自相应测量系统的值,当检索毫秒时,它会计算差异并(根据需要(转换为相应的测量单位
我认为如果你只调用它几次并不重要,但是,一切都取决于你要求的准确度是多少;Stopwatch
更准确,因为它依赖于QueuePerformanceCounter
API,所以它使用更高的分辨率。
就性能而言,我认为第二个会更有效,正如评论中的链接所示,如果你想测量秒以下的时间,那么DateTime将不准确,尽管它会是有效的
我这么认为是因为与DateTime相比,StopWatch将持续测量刻度,DateTime将只保存DateTime的一个实例,即startTime。