.NET Thread.Sleep对StopWatch计数器进行偏移?

时间:2013-03-27 07:59:22

标签: c# multithreading timer

我写了这个简单的控制台代码,但我无法解释结果。

public static void Execute2()
    {
        Stopwatch sw = new Stopwatch();

        sw.Start();
        while (sw.ElapsedMilliseconds  < 1000)
        {
            Console.WriteLine(sw.ElapsedMilliseconds);
            System.Threading.Thread.Sleep(100);
        }
    }

控制台上的OUTPUT:

0  
127  
228  
328  
429  
530  
630  
731  
831  
931  
Press a key to continue... (no debug) 

正如您所看到的,第一次调用后大约有27 ms的偏移,但是在跟随调用后,此偏移量保持不变。

我认为调用Thread.Sleep()的开销是27 ms,但它只是第一次发生。此行为重复每个构建(我运行构建而不调试)

我的机器是:核心2 duo @ 2.8Ghz,2gb ram,windows xp sp3,VS2010 pro

所以问题是:27ms的责任是什么?

2 个答案:

答案 0 :(得分:2)

它可以是很多东西,例如:

  1. JIT热身
  2. 控制台初始化

答案 1 :(得分:0)

呼叫

Thread.Sleep(100);

开始之前。并在“真实”代码之前进行任何控制台输出