Stopwatch.GetTimeStamp()
由于 BIOS 或硬件抽象层中的错误,可能会在不同的处理器上返回不同的计时结果。
有谁知道这些错误的具体含义是什么?
- 不同处理器上的时间戳是否可能完全不相关 - 或者它们最多只会偏离一小部分(亚毫秒?)?
- 不同处理器上的数字是否会随着时间的推移而分开 - 这实际上会导致上述“完全不相关的时间戳”?(我认为不同处理器上的不同频率可能会这样做)
那是因为它写在文档中:
秒表类有助于在托管代码中操作与时间相关的性能计数器。具体来说,Frequency 字段和 GetTimestamp 方法可用于代替非托管 Win32 API QueryPerformanceFrequency 和 QueryPerformanceCounter。
因此出现了使用性能计数器的好处。
Windows 实现至少有 2 个可能的性能计数器来源,即 HPET、RDTC,这由 ACPI 确定。然而,ACPI 主要是问题所在,大多数制造商实施得很糟糕,因此有时会决定完全忽略 ACPI 建议并做其他事情。
使用 RDTC 时,如果您不走运并且您测量的时间非常短,那么在另一个 CPU 上进行线程迁移将导致略微负面的结果。但它可能发生。