为什么DateTime.Now.Ticks不一致?

时间:2014-01-21 08:30:21

标签: c# datetime

我有一个简单的控制台应用程序,包含以下主体:

Console.WriteLine(DateTime.Now.Ticks.ToString());
Console.WriteLine(DateTime.Now.Ticks.ToString());
Console.WriteLine(DateTime.Now.Ticks.ToString());
Console.WriteLine(DateTime.Now.Ticks.ToString());
Console.WriteLine(DateTime.Now.Ticks.ToString());
Console.WriteLine(DateTime.Now.Ticks.ToString());
Console.WriteLine(DateTime.Now.Ticks.ToString());
Console.WriteLine(DateTime.Now.Ticks.ToString());
Console.WriteLine(DateTime.Now.Ticks.ToString());
Console.WriteLine(DateTime.Now.Ticks.ToString());

这些是三种不同运行的输出:

635258949900018675
635258949900028676   // +10001
635258949900028676   // +0
635258949900038677   // +10001
635258949900038677   // +0
635258949900038677   // +0
635258949900038677   // +0
635258949900038677   // +0
635258949900038677   // +0
635258949900038677   // +0

635258949937502423
635258949937512424   // +10001
635258949937512424   // +0
635258949937512424   // +0
635258949937512424   // +0
635258949937522425   // +10001
635258949937522425   // +0
635258949937522425   // +0
635258949937522425   // +0
635258949937522425   // +0

635258961813519906
635258961813529907   // +10001
635258961813529907   // +0
635258961813529907   // +0
635258961813529907   // +0
635258961813539908   // +10001
635258961813539908   // +0
635258961813539908   // +0
635258961813539908   // +0
635258961813539908   // +0

有人可能会认为这些值不同是正常的,因为Console.WriteLine次执行需要时间。这些行之间的间隔是一个常量值10001,但不知何故,这个值在每个步骤都没有添加到前一个值。有时它是,有时它不是。我想知道为什么会这样。

3 个答案:

答案 0 :(得分:2)

Eric Lippert对此主题有一个很好的article。关键报价:

  

“挂钟”计时器的目的是产生日期和时间   对于典型的现实世界用途,例如“Doctor Who什么时候开始?”   或“我们什么时候改为夏令时?”或“告诉我   我在午餐后上周四编辑的文件。“这些不是   需要亚微秒精度的操作。

答案 1 :(得分:1)

引用Jon:

  

你真的只是问为什么会有不同数量的电话   变化之间?如果是这样,请记住你的情况   机器 - 有多少东西可以变化。

答案 2 :(得分:1)

虽然日期时间间隔更新(每次打勾都不会发生),但您可以使用秒表更准确地测量时间,如下所示:

var sw = new Stopwatch ();
sw.Start ();
//Run some code
Console.WriteLine (sw.ElapsedMilliseconds);