2012-02-14 63 views
13

衆所周知,秒錶可能會在所有核心上運行的多線程異步應用程序中出現問題。多核和線程感知.Net秒錶?

在多處理器計算機上,運行線程的處理器並不重要。但是,由於BIOS或硬件抽象層(HAL)中的錯誤,您可以在不同的處理器上獲得不同的時序結果。要爲線程指定處理器關聯性,請使用ProcessThread.ProcessorAffinity方法。

有什麼辦法,我得到一些可靠的週期/時間戳一樣具有高分辨率/精度和值是多個CPU內核是否一致?

如果不可能讓秒錶(QueryPerformanceCounter)多核心安全,那麼在覈心之間獲得好時間戳的下一個最佳方式是什麼? DateTime.UtcNow.TicksEnvironment.TickCount?任何其他計數器?

我確實需要比DateTime.UtcNow.Ticks提供的更好的分辨率。 (10-15ms)

回答

7

我已經搜索了自己的這個具體問題的答案,我看到的最好的是DateTime.UtcNow。它似乎沒有Windows暴露的高分辨率和可靠計數器(我已經GOOGLE了一個年齡,仍然沒有遇到任何)。

+0

使用示例代碼? – 2015-10-24 19:21:51

5

實際上,根據official documentation,後Windows XP中,它應該是蠻好的多處理器系統使用秒錶/ QueryPerformanceCounter的。如果系統不支持不變的TSC,QPC將自動使用不同的計時器策略。

儘管如此,請注意虛擬化系統的註釋部分。看來你在這個特定的情況下必須小心。