14

我看到其他用户帖子显示秒表测量在“Thread.Sleep(5000)”中花费的时间约为 5000 毫秒。

但我的程序产生以下结果

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());
}

秒表差异:1684
日期时间差异:5262.592
秒表差异:1625
日期时间差异:4997.12
秒表差异:1604
日期时间差异:4997.12
秒表差异:1601
日期时间差异:4997.12
秒表差异:1690
日期时间差异:4997.12
秒表差异:1603

只有我在观察这种行为吗?为什么秒表在实际过去 5 秒后测量 1.6 秒。这是线程实际运行的时间?

4

1 回答 1

19

秒表类不可靠

这在没有恒定时钟速度的处理器上是不可靠的(大多数处理器可以降低时钟速度以节省能源)。这在这里详细解释。

于 2010-08-20T21:26:37.663 回答