多核和线程感知.Net秒表?

时间:2012-02-14 19:59:07

标签: .net performance stopwatch

众所周知,秒表可能会在所有内核上运行的多线程异步应用程序中出现问题。

  

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

有没有办法让我获得一些可靠的时间戳/时间戳,比如具有高分辨率/准确度的值以及在cpu内核中是否一致?

如果不能使秒表(QueryPerformanceCounter)多核安全,那么在核心之间获得良好时间戳的下一个最佳方法是什么? DateTime.UtcNow.Ticks Environment.TickCount ?还有其他柜台吗?

我确实需要比DateTime.UtcNow.Ticks更好的分辨率。 (10-15ms)

2 个答案:

答案 0 :(得分:7)

我自己搜索了这个特定问题的答案,我见过的最好的是DateTime.UtcNow。似乎没有Windows暴露的高分辨率和可靠的计数器(我已经谷歌搜索了很长时间,仍然没有遇到任何)。

答案 1 :(得分:5)

实际上,根据official documentation,在Windows XP之后,在多处理器系统上使用StopWatch / QueryPerformanceCounter应该没问题。如果系统不支持不变的TSC,QPC将自动使用不同的计时器策略。

请注意虚拟系统的评论部分。在特定情况下,您似乎必须小心。