14

「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秒を測定するのはなぜですか。スレッドが実際に実行されている時間ですか?

4

1 に答える 1

19

Stopwatchクラスは信頼できませ

これは、一定のクロック速度を持たないプロセッサでは信頼できません(ほとんどのプロセッサは、エネルギーを節約するためにクロック速度を下げることができます)。これについては、ここで詳しく説明します。

于 2010-08-20T21:26:37.663 に答える