2010-04-06 104 views
9

在MSDN页Stopwatch class我发现链接interesting article这使得以下有关秒表声明:秒表真的坏了吗?

但也有一些严重的问题:

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

  • 这是没有一个恒定的时钟速度 (大多数处理器可以降低时钟速度以节约能源 )处理器不可靠的。详细解释如下here

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

回答

2

这不是它只是有局限性。对于大多数目的(阅读:非正式的微型基准测试)StopWatch可以很好地使用,因为它非常适合非正式测试。为了更正式的目的,你很可能想要推出你自己的工具代码,因为你会花更多的精力来获得正确的结果。

2

更有趣的问题是:

  1. 在什么条件下会停止()可以在不同的处理器比开始执行的()?

    在大多数应用场景中,答案是“无”。

  2. 在什么情况下,处理器的时钟速度会在测量间隔期间发生变化?

    在CPU密集型基准测试中,“无”。

+0

在CPU密集型基准测试中,您可能是对的。但是在异步IO的情况下,情况可能会完全不同。 – 2010-04-06 15:25:00

+0

我不同意你的第一个陈述。我有一台破损的电脑,而且经常出现。由于时间倒退,它甚至导致游戏崩溃。 – CodesInChaos 2012-05-27 11:39:48

2

见注释在MSDN文章:

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