【问题标题】:Is Stopwatch really broken?秒表真的坏了吗?
【发布时间】:2010-04-06 14:53:51
【问题描述】:

Stopwatch class 的 MSDN 页面上,我发现了指向 interesting article 的链接,它对秒表做出了以下声明:

但是有一些严重的问题:

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

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

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

【问题讨论】:

    标签: .net stopwatch


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      更多有趣的问题是:

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

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

      【讨论】:

      • 在 CPU 密集型基准测试的情况下,您可能是对的。但在异步 IO 的情况下,情况可能完全不同。
      • 我不同意你的第一句话。我有一台坏了的电脑,它经常出现。它甚至会因为时间倒退而导致游戏崩溃。
      【解决方案3】:

      请参阅 MSDN 文章中的注释:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-21
        • 2021-12-31
        • 2015-03-04
        • 2016-09-08
        • 2011-07-14
        相关资源
        最近更新 更多