C#为什么方法的运行时间不一样?

NiC*_*iCU 2 c# stopwatch

如果我测量方法的运行时间,如果我给出相同的输入数据,它不应该相同吗?我使用了秒表:

Stopwatch sw = new Stopwatch();
sw.Start();
//code here
sw.Stop();
label3.Text = "Running Time:"+sw.Elapsed.TotalMilliseconds;
Run Code Online (Sandbox Code Playgroud)

zmb*_*mbq 7

没有代码就很难分辨.

由于几个原因,您可能会看到差异 - 这绝不是一个完整的列表:

  1. 计算机很忙 - 您的计算机正在执行其他操作,这意味着它可以为您的代码提供更少的资源(CPU时间).
  2. I/O--你做了一些可能需要一段时间或很长时间的I/O.
  3. Jitting - 第一次运行方法时,JIT编译器会编译它,这需要时间.第二次它需要更少.
  4. 缓存命中和未命中 - 如果您测量两次相同的代码,第二次可能会更快,因为代码使用的数据已经在缓存中.