【问题标题】:Multicore and thread aware .Net stopwatch?多核和线程感知.Net 秒表?
【发布时间】:2012-03-06 04:53:05
【问题描述】:

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

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

有什么方法可以让我获得一些可靠的滴答/时间戳,例如具有高分辨率/准确度的值,并且在 cpu 内核之间保持一致?

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

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

【问题讨论】:

    标签: .net performance stopwatch


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      不过,请注意关于虚拟化系统的评论部分。在那种特殊情况下,您似乎必须小心。

      【讨论】:

        猜你喜欢
        • 2011-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-19
        • 2016-09-30
        • 1970-01-01
        • 1970-01-01
        • 2020-08-26
        相关资源
        最近更新 更多