C# 日期时间精度?

C# 日期时间精度?,c#,.net,datetime,C#,.net,Datetime,(忽略优化编译器标志) 在某些系统上,该代码是否会进入阻塞 if (Datetime.Now!=Datetime.Now) { ... } 我的意思是,它如何评估这里的值?(是点菜的吗) 是否存在条件可能为真的情况 同样,忽略优化标志。DateTime的精度为100ns。但在典型的实现中,DateTime.Now仅每隔几毫秒更改一次 Datetime.Now!=Datetime.Now可能是真的,但这极不可能发生。这是多线程代码中常见的典型竞争条件。i、 e.不应依赖于DateTime.No

(忽略优化编译器标志)

在某些系统上,该代码是否会进入阻塞

if (Datetime.Now!=Datetime.Now)
{
 ...
}
我的意思是,它如何评估这里的值?(是点菜的吗)

是否存在条件可能为真的情况


同样,忽略优化标志。

DateTime
的精度为100ns。但在典型的实现中,
DateTime.Now
仅每隔几毫秒更改一次


Datetime.Now!=Datetime.Now
可能是真的,但这极不可能发生。这是多线程代码中常见的典型竞争条件。i、 e.不应依赖于
DateTime.Now
不更改,而应将副本存储在局部变量中。

DateTime.Now
内部调用:

public static DateTime Now
{
    get
    {
        return DateTime.UtcNow.ToLocalTime();
    }
}
它在内部呼吁:

public static DateTime UtcNow
{
    get
    {
        long systemTimeAsFileTime = DateTime.GetSystemTimeAsFileTime();
        return new DateTime((ulong)(systemTimeAsFileTime + 504911232000000000L | 4611686018427387904L));
    }
}
其中是返回系统时钟信息的WindowsAPI函数。精度取决于系统,所以


如果由于某种原因,在不同的get(
DateTime.Now
)之间存在延迟,可能会产生不同的结果,导致相等比较器失败。但就我个人而言,我从未遇到过这种情况。

它与计算机频率时钟有某种关系吗?它与影响计时器的内部系统计时器有关,
线程。睡眠,
日期时间。现在,
环境。滴答声
,线程切换,…如果我没记错的话,
DateTime。现在
使用IO,成本相对较高。存储副本的另一个原因。编辑:这里是我指的链接:@TimSchmelter它很昂贵,因为它需要进行时区转换。好吧,得到零件的实际时间相当便宜。在我的comp
DateTime.UtcNow
成本为9ns,
DateTime.Now
成本为900ns。我想在一个非常慢的系统上。你只需要在两次调用之间暂停1个刻度就可以使它们不同。我喜欢这个答案@leppie,其中“刻度”表示系统计时器正在运行,而不是表示100ns的
tick
单位。@CodesInChaos:不,我是指后者。或者至少是某种形式的四舍五入,例如
49.9ns vs 50ns
@RoyiNamir它会显示那些数字是的,但你会看到它们不会单独改变。如果有人问这样的问题,我只能猜测,不知道在这之后前面的人会对我有什么看法:)