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

use*_*316 14 .net performance stopwatch

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

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

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

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

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

Mar*_*rko 7

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


Sør*_*sen 5

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

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