【发布时间】:2013-10-04 16:53:18
【问题描述】:
我搜索了这个问题,但没有看到答案。如果它是重复的,我很乐意将其关闭。
我目前正在尝试对一项技术进行一些性能评估,并看到了一些令人难以置信的结果,因此我决定进行一些实验。为此,我想尝试看看 Stopwatch 类是否返回了我的预期。
Stopwatch sw = Stopwatch.StartNew();
Thread.Sleep(1);
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
在这种情况下,我几乎看到了 15 毫秒的返回值。我知道 DateTime 的分辨率在那里,但 Thread.Sleep(1) 不应该让线程休眠 1ms 吗?我所在的系统返回 Stopwatch.IsHighResolution true 并在 .NET 4 中运行。
背景: 这段完整和正确形式的代码旨在收集一些关于 Aerospike db get 请求的数字。数据库不在同一个盒子上。当我在查询中间打印出 sw.ElapsedMilliseconds 时,我看到的主要是亚毫秒级响应,考虑到我的 Java 等效代码大部分时间返回更可信的 5ms-15ms 响应,这听起来有点可疑。 Java 代码使用 System.nanoTime() 的差异。我的 C# 代码中的 submilli 响应是指 Console.WriteLine(sw.ElapsedMilliseconds) 打印 0。
【问题讨论】:
-
我认为对于非常低的数量,线程进入睡眠并再次醒来需要更多的实际时间。我建议你尝试增加
sleep()参数,看看参数和实际睡眠时间的数量是相等的。 -
我将其逐步提高到大约 100 毫秒,但我仍然始终看到高出 5 到 15 毫秒。我知道它不是实时操作系统,但我没想到会看到这个
-
我不会说它一定是重复的,但答案就在那里。我应该删除这个问题吗?