9

秒表类的 MSDN 页面上,我发现了指向有趣文章的链接,该文章对秒表进行了以下陈述:

但是有一些严重的问题:

  • 这在具有多个处理器的 PC 上可能不可靠。由于
    BIOS 中的错误,必须在同一处理器上执行 Start() 和 Stop() 才能获得正确的结果。

  • 这在没有恒定时钟速度的处理器上是不可靠的(大多数处理器可以降低时钟速度以节省能源)。这在这里详细解释。

我有点困惑。我见过大量使用秒表的例子,但没有人提到这个缺点。这有多严重?我应该避免使用秒表吗?

4

3 回答 3

2

它没有被破坏,它只是有局限性。对于大多数目的(阅读:非正式的微基准测试)StopWatch来说,使用它是很好的,因为它对于非正式测试来说已经足够好了。对于更正式的目的,您很可能希望滚动自己的检测代码,因为您会投入更多资金来获得正确的结果。

于 2010-04-06T14:56:08.853 回答
2

更有趣的问题是:

  1. 在什么情况下 Stop() 将在与 Start() 不同的处理器上执行?
    .
    在大多数应用场景中,答案是“无”。

  2. 在什么条件下,处理器的时钟速度会在测量的时间间隔内发生变化?
    .
    在 CPU 密集型基准测试中,“无”。

于 2010-04-06T14:59:28.470 回答
2

请参阅 MSDN 文章中的注释:

在多处理器计算机上,线程运行在哪个处理器上并不重要。但是,由于 BIOS 或硬件抽象层 (HAL) 中的错误,您可以在不同的处理器上获得不同的计时结果。要为线程指定处理器关联,请使用 ProcessThread.ProcessorAffinity 方法。

于 2010-04-06T15:02:07.997 回答