2

我需要在 .NET 应用程序中访问非常精确的时间。

我需要微秒精度。

在 .NET 中是否有一种简单的方法可以做到这一点?

4

6 回答 6

6

System.Diagnostics.Stopwatch是适合您计时中这种粒度程度的正确类,但请确保使用 Stopwatch 对象的Elapsed.Ticks属性而不是其ElapsedTicks属性,因为它们是两个不同的东西。

  • ElapsedTicks(不带点)是指秒表的刻度数,因此需要与Stopwatch.Frequency(并非所有机器都相同)一起使用来计算经过的时间。
  • Elapsed.Ticks(带点)给出滴答数Timespan不依赖于秒表频率。

这可能是.Net中最微妙的潜在错误之一。

另外,请注意秒表高度精细的,但不一定那么准确(取决于您对术语的定义)。秒表返回的经过时间往往会偏离系统时间。

在我的笔记本电脑上,秒表在 24 小时内运行几乎快 5 秒,而在其他一些机器上这种效果更差。

当然,如果您的时间很短,那么这种效果根本不重要。

于 2009-10-13T21:28:13.907 回答
4

该类Stopwatch是您可以获得的最佳精度,它使用高频计时器。
秒表的频率取决于 CPU 的频率,但通常在每秒数百万次的范围内。

如果 CPU 不提供高频定时器,则该类将回退到每秒 100-50 次范围内的系统定时器。

于 2009-10-13T21:01:30.013 回答
3

使用Stopwatch类,应该可以解决问题。

于 2009-10-13T21:01:42.690 回答
2

由于它的准确性,秒表类是您的最佳选择

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

于 2009-10-13T21:01:42.057 回答
1

除了System.Diagnostics.StopWatch还检查这个链接:The Multimedia Timer for the .NET Framework。高温高压

于 2009-10-13T21:05:39.523 回答
0

我找到了一种比 StopWatch、PerformanceCounters 和我遇到的所有其他实现更精确的方法,并且不需要 Platform Invoke 或其他方式。

请参阅https://stackoverflow.com/questions/15725711/obtaining-microsecond-precision-using-net-without-platform-invoke

如果您发现其他情况,请告诉我!

于 2013-03-31T04:31:17.070 回答