【发布时间】:2010-08-20 21:17:43
【问题描述】:
我看到其他用户帖子显示秒表测量在“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 秒。是线程实际运行的时间?
【问题讨论】:
-
对我来说效果很好 - 秒表 Diff:5000,DateTime Diff:5000.5。这正是您运行的代码吗?
-
另一个线程正在谈论测量中偶尔出现的严重错误。在我的情况下,测量的时间总是小 3 倍。
标签: c# multithreading timer stopwatch