c#需要更多时间才能执行

use*_*495 4 c# execution-time

我注意到我的c#app有点不寻常.我第一次执行某些代码比后续执行需要更长的时间.任何人都可以向我解释为什么会这样吗?

通过我下面的简单测试应用程序甚至可以看到它的初始输出大约为13,后续输出大约为3.

    Stopwatch sw;
    int count = 0;
    private void Window_KeyUp(object sender, KeyEventArgs e)
    {
        RunTest();
    }

    private void RunTest()
    {
        sw = Stopwatch.StartNew();
        count = 0;
        for (int i = 0; i < 100; i++)
        {
            count++;
        }
        Console.WriteLine(sw.ElapsedTicks);
    }
Run Code Online (Sandbox Code Playgroud)

Ser*_*rvy 11

第一次执行包括Just In Time(JIT)编译器将代码从Microsoft的中间语言(MSIL)转换为您运行代码的任何机器的本机可执行机器代码所花费的时间.

所有后续调用都将重用已编译的代码.

  • 我对此不太确定... JIT是通过方法*完成的,他开始在*RunTest中测量时间*,这意味着此时`RunTest`方法已经被JIT.他使用的所有其他方法(`Console.WriteLine`等)都是NGen和GAC,所以他们根本不需要JIT时间.我相信他只是(微)基准测试这个错误(调试模式左右). (2认同)