私はこのコードを持っている:このコードはなぜ予想より速く実行されますか?
このような個別のスレッドとして起動されpublic void replay() {
long previous = DateTime.Now.Ticks;
for (int i = 0; i < 1000; i++) {
Thread.Sleep(300);
long cur = DateTime.Now.Ticks;
Console.WriteLine(cur - previous);
previous = cur;
}
}
:私は出力を見れば
MethodInvoker replayer = new MethodInvoker(replay);
replayer.BeginInvoke(null, null);
しかし、それが妙に動作します。これは、ペアでi
を出力します。たとえば、完全待ちを待ってからi
を出力し、次のi
もすばやく出力してから、もう一度待機します。なぜそれをやっているのですか?それをどうやって修正できますか?
それは、この出力:
3125040
2968788
2968788
2968788
3125040
2968788
2968788
2968788
3125040
2968788
2968788
2968788
3125040
私はこれが起こらない秒以上に睡眠を増やす場合。
まず、リリースモードまたはデバッグモードですか?次に、コンソールの出力を監視するのではなく、タイマーを使用してください。コンソールにすぐに表示されるという保証はありません。 –
これはデバッグモードです – Malfist
これはコンソールでバッファリングされていませんか? – annakata