0

Stopwatch.GetTimeStamp()由于 BIOS 或硬件抽象层中的错误,可能会在不同的处理器上返回不同的计时结果

有谁知道这些错误的具体含义是什么?

  1. 不同处理器上的时间戳是否可能完全不相关 - 或者它们最多只会偏离一小部分(亚毫秒?)?
  2. 不同处理器上的数字是否会随着时间的推移而分开 - 这实际上会导致上述“完全不相关的时间戳”?(我认为不同处理器上的不同频率可能会这样做)
4

1 回答 1

1

那是因为它写在文档中:

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

因此出现了使用性能计数器的好处。

Windows 实现至少有 2 个可能的性能计数器来源,即 HPET、RDTC,这由 ACPI 确定。然而,ACPI 主要是问题所在,大多数制造商实施得很糟糕,因此有时会决定完全忽略 ACPI 建议并做其他事情。

使用 RDTC 时,如果您不走运并且您测量的时间非常短,那么在另一个 CPU 上进行线程迁移将导致略微负面的结果。但它可能发生。

于 2014-06-05T05:07:11.447 回答