2012-02-14 71 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将自动使用不同的计时器策略。

尽管如此,请注意虚拟化系统的注释部分。看来你在这个特定的情况下必须小心。