0

System.Diagnostics.Stopwatch.Net 支持使用该类进行高分辨率计时。我了解此类使用的具体分辨率因底层硬件而异,可以通过 static 属性获得Stopwatch.Frequency

此频率似乎与 CPU 频率有关,并Stopwatch读取此值并将其存储在静态初始化器/构造器内的静态类变量中。因此,我现在想知道如果 CPU 时钟发生变化,这个类是否会报告不正确的时序?例如,在根据系统负载改变 CPU 时钟的系统中。

4

1 回答 1

2

MSDN:

*The Frequency value depends on the resolution of the underlying timing mechanism. If the installed hardware and operating system support a high-resolution performance counter, then the Frequency value reflects the frequency of that counter. Otherwise, the Frequency value is based on the system timer frequency.*

Stopwatch.Frequency 的来源不是 CPU 频率。它是高频硬件计数器的频率。在 Windows 上,此计数器频率通常也通过调用QueryPerformanceCounter 函数来读取,而在 linux高分辨率 POSIX 计时器上用于获得高分辨率计时。

时间戳计数器(RDTSC - CPU 频率)的使用经常在这种情况下讨论,但没有真正的相关性:

一些较旧的硬件可能不提供任何用于计时目的的高频硬件,因此使用 CPU 的频率作为替代。当使用 CPU 频率进行计时时,需要确保频率保持恒定。更现代的硬件提供动态 CPU 频率修改。在动态修改时使用 CPU 频率作为衡量标准会导致一团糟。

幸运的是,这是non existing情况。可以修改其 CPU 频率的系统更现代。这种现代系统也确实有一个单独的高频定时器硬件高精度事件定时器

有一些关于在多核系统上使用 CPU 频率的传言。事实上,某些硬件存在问题。但那是很久以前的事了,而且已经修复了一段时间。

于 2012-10-18T07:05:18.830 回答