Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DateTime.Now和DateTime.Now之间差异的可能原因_C#_.net - Fatal编程技术网

C# DateTime.Now和DateTime.Now之间差异的可能原因

C# DateTime.Now和DateTime.Now之间差异的可能原因,c#,.net,C#,.net,我在笔记本电脑上运行以下c#代码 Console.WriteLine((DateTime.Now DateTime.Now).total毫秒); WriteLine((DateTime.Now DateTime.Now).total毫秒); WriteLine((DateTime.Now DateTime.Now).total毫秒); 在不同的情况下会产生不同的结果(实际上我不知道是什么原因导致了这种差异)。例如,有时会变成这样: 0 0 0 -15,6084 0 0 有时是这样的: 0

我在笔记本电脑上运行以下c#代码

Console.WriteLine((DateTime.Now DateTime.Now).total毫秒);
WriteLine((DateTime.Now DateTime.Now).total毫秒);
WriteLine((DateTime.Now DateTime.Now).total毫秒);
在不同的情况下会产生不同的结果(实际上我不知道是什么原因导致了这种差异)。例如,有时会变成这样:

0
0
0
-15,6084
0
0
有时是这样的:

0
0
0
-15,6084
0
0

我首先想到的第一个原因可能是在JIT的代码第一次执行时挂起,然后它会变得更快,因为这个原因,计算之间存在时间间隔,并且会出现差异。这是真的吗?或者主要原因是什么?

好吧,每一行,甚至每一句话都需要一些时间——可能只是一纳秒。因此,如果您多次评估
DateTime。那么肯定会得到不同的结果。有一种简单的方法可以验证它是否是JIT。运行该方法一次,忽略结果。然后运行测试。后面的测试不会紧张,因为第一个测试已经完成了。时间一直在溜进未来。时钟通常每秒更新64次。因此,15.625毫秒,如果机器最近接收到时间服务器更新,则或多或少。我的经验法则:如果我需要DateTime的值。现在在一个方法中多次(必须是相同的值),我将值存储到一个局部变量中,并使用该变量而不是一直使用DateTime.Now属性。假设它从未给出不同的答案(即始终为0)。这意味着它的速度如此之快,以至于两个呼叫总是在同一个16毫秒的窗口中。但让我们从逻辑上得出结论。呼叫1和2必须在同一个16毫秒窗口中。也适用于2和3。以及3和4。以及1001和1002。以及10000000000000和10000000000001。显然,这是胡说八道。CPU不能在给定的时间片内执行无限的操作(另外,时间显然不会静止不动)。因此,根据定义,无论JIT如何,它都不能总是返回0。