是DateTime.Now是一个I/O绑定操作?

Wat*_* v2 18 .net c# datetime

你打电话DateTime.Now怎么办?

我按照Reflector中的属性代码,它似乎将当前语言环境的时区偏移量添加到UtcNow.接下来,UTCNow我转过来,最后转到Win32 API调用.

我对此进行了反思并提出了相关问题,但尚未收到令人满意的答复.从目前评论中关于该问题的链接,我推断有一个硬件单元可以保留时间.但我也想知道它保留了什么单位以及它是否使用CPU将时间转换为人类可读单元.这将揭示日期和时间信息的检索是I/O绑定还是计算绑定.

Han*_*ant 35

对于这个问题,你处于无证领域.时间由内核提供:底层的本机API调用NtQuerySystemTime().这确实在Windows版本得到了修补--Windows 8特别严重地改变了底层实现,并带来了明显的副作用.

它本质上是I/O限制:时间由RTC(实时时钟)维持,RTC曾经是专用芯片,但现在集成在芯片组中.但是有非常有力的证据表明它在实践中不受I/O限制.时间更新与时钟中断同步,因此中断处理程序很可能会读取RTC并获得值的副本.当你修补时你可以看到的东西timeBeginPeriod().

并且您可以看到,当您对其进行分析时,它在Windows 10上只需要约7纳秒 - 完全太快而无法进行I/O限制.

  • 它在内核中,RTC可能是中断源.也严重影响线程调度程序,上下文切换以中断率发生.睡眠()的基本原因永远不会比速率更准确.更深入的未记录细节,不应影响您的编码方式. (2认同)