在C#中,在启动时,是否有一种方法可以强制JIT编译器处理整个应用程序中的所有MSIL代码

本文关键字:处理 编译器 代码 JIT MSIL 应用程序 方法 是否 启动 一种 | 更新日期: 2023-09-27 18:26:46

我们有一个C#程序,可以执行一些定时测量。不幸的是,它第一次测量的速度比第二次和随后的测量慢20倍,这可能是由于JIT(实时)编译。

有没有一种方法可以确保在启动时,整个应用程序中的每一行MSIL代码都是用JIT编译器编译的?

在C#中,在启动时,是否有一种方法可以强制JIT编译器处理整个应用程序中的所有MSIL代码

正如ta.speot.所说,答案可能是使用NGEN;这是一个工具,可以预编译程序集,并将其转换为运行平台的本机代码。

因此,它通常在应用程序的设置阶段运行。

MSDN在这里有一个指南:

http://msdn.microsoft.com/en-us/library/6t9t5wcf(v=vs.71).aspx

如果你不能使用NGEN,正如@ta.speot.is在评论中或@Russ C在他的回答中所建议的那样,另一种方法是为所涉及的代码"预热"JITter。

基本上,如果为了进行性能测量而调用某些代码1000次,那么在进行实际测量之前,只调用一次代码而不计时,只是为了JIT所有代码。

即。像这样的东西:

MethodUnderTest();
Stopwatch sw = Stopwatch.StartNew();
for (int index = 0; index < 1000; index++)
    MethodUnderTest();
sw.Stop();