代码之家  ›  专栏  ›  技术社区  ›  Jakub Å turc

秒表真的坏了吗?

  •  9
  • Jakub Å turc  · 技术社区  · 16 年前

    在MSDN页面 Stopwatch class 我发现了 interesting article 关于秒表的声明如下:

    但也有一些严重的问题:

    • 在有多个处理器的PC上,这是不可靠的。因为一个窃听器
      必须在同一个处理器上执行bios、start()和stop()才能获取 正确的结果。

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

    我有点困惑。我见过 tons of examples 使用秒表却没人提到这个缺点。这有多严重?我应该避免使用秒表吗?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Andrew Hare    16 年前

    它不是 破碎的 只是有局限性。在大多数情况下(阅读:非正式的微观基准测试) StopWatch 仅仅因为它对于非正式测试来说已经足够好了,所以可以使用它。为了更正式的目的,您很可能希望滚动您自己的工具代码,因为您会在获得正确的结果方面投入更多的精力。

        2
  •  2
  •   Cheeso    16 年前

    更有趣的问题是:

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

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

        3
  •  2
  •   Michael Stum    16 年前

    请参阅MSDN文章中的注释:

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

    推荐文章