2014-01-21 68 views
5

我有以下的身体一个简单的控制台应用程序:为什么DateTime.Now.Ticks不一致?

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,但不知何故,这个值不会被添加到每一步的前一个值。有时候是,有时并非如此。我想知道为什么会发生这种情况。

+0

目前还不清楚你在问什么 - 之间的间隔就我所知,两个不同的值总是似乎是10001个刻度。你真的只是问为什么变化之间有不同数量的调用?如果是这样,请记住你的机器有多少 - 以及有多少事情可能会有所不同。 –

+0

对不起。我的意思是在每一步都不会增加10001。有时会增加,有时却不会。 –

+0

谢谢@JonSkeet。你几乎总是回答有关日期时间的问题:)。我希望你能看到我的另一个问题,我很长一段时间寻找答案。我知道你没有太多时间,但请你分享一下你的看法?提前致谢。 http://stackoverflow.com/questions/20924278/why-does-timespan-tostring-require-escaping-separators –

回答

1

报价乔恩:

你真的只是问为什么有改变之间的调用 不同的数字?如果是这样,请记住您的机器有多少 - 以及有多少可能会有所不同。

2

Eric Lippert拥有优秀的article关于此主题。主要报价:

的“挂钟”的目的计时器是产生典型的现实世界的日期和时间 使用,像 或“我们什么时候变成“什么时间医生是谁开始?”夏令时?“或”显示我午餐后上周四编辑的 文件“。这些不是 操作,需要亚微秒准确度。

0

虽然间隔日期时间更新(不发生一次打勾)你可以用秒表来更准确地这样的测量时间:

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