「Thread.Sleep(5000)」で費やされたストップウォッチの測定時間が約5000msであることを示す他のユーザー投稿を見ました。
しかし、私のプログラムは次の結果を生み出します
for (int i = 0; i < 20; ++i)
{
Stopwatch sw = Stopwatch.StartNew();
DateTime start = DateTime.Now;
Thread.Sleep(5000);
sw.Stop();
Console.Out.WriteLine(
"StopWatch Diff:" +
sw.ElapsedMilliseconds.ToString());
Console.Out.WriteLine(
"DateTime Diff:" +
DateTime.Now.Subtract(start).TotalMilliseconds.ToString());
}
StopWatch Diff:1684 DateTime Diff:5262.592 StopWatch Diff:1625 DateTime Diff:4997.12 StopWatch Diff:1604 DateTime Diff:4997.12 StopWatch Diff:1601 DateTime Diff:4997.12 StopWatch Diff:1690 DateTime Diff:4997.12 StopWatch Diff:1603
この行動を観察しているのは私だけですか?5秒が実際に経過したのにストップウォッチが1.6秒を測定するのはなぜですか。スレッドが実際に実行されている時間ですか?