在Stopwatch class的MSDN页面上,我发现了interesting article的链接,其中有关于秒表的声明:
我很困惑。我见过tons of examples使用秒表,没有人提到这个缺点。这有多严重?我应该避免使用秒表吗?但是有一些严重的问题:
在具有多个处理器的PC上,这可能不可靠。由于中的错误 BIOS,Start()和Stop()必须在同一处理器上执行才能获得 一个正确的结果。
对于没有恒定时钟的处理器,这是不可靠的 速度(大多数处理器可以降低时钟速度以节省 能源)。详细解释了here。
答案 0 :(得分:2)
它不是破碎它只是有局限性。对于大多数用途(阅读:非正式微基准测试)StopWatch
可以使用,因为它非常适合非正式测试。出于更正式的目的,您很可能希望推出自己的仪器代码,因为您需要更多地投入以获得正确的结果。
答案 1 :(得分:2)
更有趣的问题是:
在什么条件下,Stop()会在与Start()不同的处理器上执行?
。
在大多数应用场景中,答案是“无”。
在什么条件下处理器的时钟速度会在测量间隔内发生变化?
。
在CPU密集型基准测试中,“无”。
答案 2 :(得分:2)
请参阅MSDN文章中的说明:
在多处理器计算机上,运行该线程的处理器无关紧要。但是,由于BIOS或硬件抽象层(HAL)中的错误,您可以在不同的处理器上获得不同的时序结果。要指定线程的处理器关联,请使用ProcessThread.ProcessorAffinity方法。