C#秒表显示错误的时间

我看过其他用户post显示秒表测量在“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
 DateTime Diff:5262.592
秒表差异:1625
 DateTime Diff:4997.12
秒表差异:1604
 DateTime Diff:4997.12
秒表差异:1601
 DateTime Diff:4997.12
秒表差异:1690
 DateTime Diff:4997.12
秒表差异:1603

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

秒表课程不可靠 。

这对于没有恒定时钟速度的处理器来说是不可靠的(大多数处理器可以降低时钟速度以节省能量)。 这将在此详细解释。