我有一个简单的控制台应用程序,包含以下主体:
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 :(得分:2)
Eric Lippert对此主题有一个很好的article。关键报价:
“挂钟”计时器的目的是产生日期和时间 对于典型的现实世界用途,例如“Doctor Who什么时候开始?” 或“我们什么时候改为夏令时?”或“告诉我 我在午餐后上周四编辑的文件。“这些不是 需要亚微秒精度的操作。
答案 1 :(得分:1)
引用Jon:
你真的只是问为什么会有不同数量的电话 变化之间?如果是这样,请记住你的情况 机器 - 有多少东西可以变化。
答案 2 :(得分:1)
虽然日期时间间隔更新(每次打勾都不会发生),但您可以使用秒表更准确地测量时间,如下所示:
var sw = new Stopwatch ();
sw.Start ();
//Run some code
Console.WriteLine (sw.ElapsedMilliseconds);