我需要在 .NET 应用程序中访问非常精确的时间。
我需要微秒精度。
在 .NET 中是否有一种简单的方法可以做到这一点?
System.Diagnostics.Stopwatch是适合您计时中这种粒度程度的正确类,但请确保使用 Stopwatch 对象的Elapsed.Ticks
属性而不是其ElapsedTicks
属性,因为它们是两个不同的东西。
ElapsedTicks
(不带点)是指秒表的刻度数,因此需要与Stopwatch.Frequency
(并非所有机器都相同)一起使用来计算经过的时间。Elapsed.Ticks
(带点)给出滴答数,Timespan
不依赖于秒表频率。
这可能是.Net中最微妙的潜在错误之一。
另外,请注意秒表是高度精细的,但不一定那么准确(取决于您对术语的定义)。秒表返回的经过时间往往会偏离系统时间。
在我的笔记本电脑上,秒表在 24 小时内运行几乎快 5 秒,而在其他一些机器上这种效果更差。
当然,如果您的时间很短,那么这种效果根本不重要。
该类Stopwatch
是您可以获得的最佳精度,它使用高频计时器。
秒表的频率取决于 CPU 的频率,但通常在每秒数百万次的范围内。
如果 CPU 不提供高频定时器,则该类将回退到每秒 100-50 次范围内的系统定时器。
使用Stopwatch类,应该可以解决问题。
由于它的准确性,秒表类是您的最佳选择:
http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx
例子:
https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-6167361.html
我找到了一种比 StopWatch、PerformanceCounters 和我遇到的所有其他实现更精确的方法,并且不需要 Platform Invoke 或其他方式。
如果您发现其他情况,请告诉我!