多处理器上的Stopwatch.GetTimeStamp

时间:2014-06-05 05:03:10

标签: .net clock stopwatch bios hal

Stopwatch.GetTimeStamp()可能会返回different timing results on different processors because of bugs in the BIOS or the Hardware Abstraction Layer

有谁知道具体来说这些错误存在什么?

  1. 不同处理器上的时间戳可能完全不相关 - 或者它们最多只能少量(亚毫秒?)?
  2. 不同处理器上的数字会随着时间的推移而分开 - 这实际上会导致前面提到的"时间戳完全不相关&#34 ;? (我认为不同处理器上的不同频率可能会这样做)

1 个答案:

答案 0 :(得分:1)

这是因为它写在doc:

  

秒表课程有助于操纵与时间相关的操作   托管代码中的性能计数器。具体来说,频率   可以使用字段和GetTimestamp方法代替非托管方法   Win32 API QueryPerformanceFrequency和QueryPerformanceCounter。

因此,使用性能计数器的问题就来了。

Windows实现至少有两个可能的性能计数器源,HPET,RDTC,这由ACPI决定。然而,ACPI主要是问题,大多数制造商正在严格执行它,因此有时候决定完全忽略ACPI建议并做其他事情。

当使用RDTC时,如果运气不在你身边并且你无论如何都要测量一个超小的时间,那么在另一个CPU上进行线程迁移会导致轻微的负面结果。但它可能发生。