在秒表类的 MSDN 页面上,我发现了指向有趣文章的链接,该文章对秒表进行了以下陈述:
但是有一些严重的问题:
这在具有多个处理器的 PC 上可能不可靠。由于
BIOS 中的错误,必须在同一处理器上执行 Start() 和 Stop() 才能获得正确的结果。这在没有恒定时钟速度的处理器上是不可靠的(大多数处理器可以降低时钟速度以节省能源)。这在这里详细解释。
我有点困惑。我见过大量使用秒表的例子,但没有人提到这个缺点。这有多严重?我应该避免使用秒表吗?
它没有被破坏,它只是有局限性。对于大多数目的(阅读:非正式的微基准测试)StopWatch
来说,使用它是很好的,因为它对于非正式测试来说已经足够好了。对于更正式的目的,您很可能希望滚动自己的检测代码,因为您会投入更多资金来获得正确的结果。
更有趣的问题是:
在什么情况下 Stop() 将在与 Start() 不同的处理器上执行?
.
在大多数应用场景中,答案是“无”。
在什么条件下,处理器的时钟速度会在测量的时间间隔内发生变化?
.
在 CPU 密集型基准测试中,“无”。
请参阅 MSDN 文章中的注释:
在多处理器计算机上,线程运行在哪个处理器上并不重要。但是,由于 BIOS 或硬件抽象层 (HAL) 中的错误,您可以在不同的处理器上获得不同的计时结果。要为线程指定处理器关联,请使用 ProcessThread.ProcessorAffinity 方法。