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微秒
如何解释这一点。