在静态Stopwatch
构造函数内,我们可以看到以下代码,基本上检查是否存在高分辨率性能计数器。
static Stopwatch()
{
if (!SafeNativeMethods.QueryPerformanceFrequency(out Frequency))
{
IsHighResolution = false;
Frequency = 0x989680L;
tickFrequency = 1.0;
}
else
{
IsHighResolution = true;
tickFrequency = 10000000.0;
tickFrequency /= (double) Frequency;
}
}
在 MSDN 上关于 QueryPerformanceFrequency
的说明是:
检索高分辨率性能计数器的频率,如果存在,则检索该频率。
然而,这个描述并不是很清晰,它到底什么时候存在?我怀疑现在的大多数机器上都存在,但是到底什么情况下不存在呢?
这很有意思,因为当它不存在时,Stopwatch
就变成了一个简单地封装了 DateTime.UtcNow
属性的类。