2014-01-21 11 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()); 

をそして、これらは、3回の異なる実験の出力です:

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つの異なる値は、私が知る限り、常に10001ティックであるように見えます。あなたは本当に変化の間に呼び数が異なるのはなぜですか?そうであれば、あなたのマシンでどれだけのことが起こっているのか、どれだけ変化するのかを覚えておいてください。 –

+0

申し訳ありません。私はそれがすべてのステップで10001ずつ増加していないことを意味します。時々それは増加し、ときにはそれはしません。 –

+0

ありがとう@JonSkeet。ほとんどの場合、datetimeに関連する質問にはほとんど応答します。私は長い間あなたが答えを探しているという私の別の質問を見ることを望みました。あなたは時間があまりないと知っていますが、これについてあなたの意見をお寄せください。前もって感謝します。 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);