2010-04-06 105 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方法。