0

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

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

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

控制台上的输出:

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

如您所见,第一次调用后大约有 27 毫秒的偏移量,但在接下来的调用中,此偏移量保持不变。

我认为 27 毫秒是由调用 Thread.Sleep() 的开销造成的,但它只发生在第一次。这种行为在每次构建时都会重复(我在没有调试的情况下运行构建)

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

所以问题是:27ms 的原因是什么?

4

2 回答 2

2

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

  1. JIT 预热
  2. 控制台的初始化
于 2013-03-27T08:03:05.430 回答
0

称呼

Thread.Sleep(100);

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

于 2013-03-27T08:05:44.030 回答