在第一次调用时调用存储在委托中的方法需要更长的时间

时间:2014-12-23 12:34:27

标签: c# delegates jit

private void DoSomething(object sender, EventArgs e)
{
    Func<int, int> f = (i) => i * 2;

    RuntimeHelpers.PrepareDelegate(f);

    Stopwatch dummy = new Stopwatch();

    Stopwatch sw = new Stopwatch();

    sw.Start();
    f(2); // Call 1
    sw.Stop();

    Stopwatch sw2 = new Stopwatch();

    sw2.Start();
    f(2); //Call 2
    sw2.Stop();

    MessageBox.Show(string.Format("First Call: {0}, Second Call: {1}", sw.Elapsed.TotalMilliseconds * 1000, sw2.Elapsed.TotalMilliseconds * 1000));

}

在参考上面的代码中,我使用RuntimeHelpers.PrepareDelegate方法来传递JIT编译并在第一次调用之前准备本机代码。但是&#34;呼叫1&#34;仍然需要更长时间才能执行,而不是#34;呼叫2&#34;。

示例运行:

第一次打电话给DoSomething时, 呼叫1需要2.4微秒,呼叫2需要0.4微秒

第二次打电话给DoSomething时, 呼叫1需要0.8微秒,呼叫2需要0.4微秒

如何解释这一点。

0 个答案:

没有答案