.NET编译IL的次数是多少次

时间:2014-05-23 14:27:16

标签: .net compilation jit il

我正在读第二本书但它仍然不明显。

我的问题是: 编译IL语言的次数: a)每次从一开始就执行申请。 b)首次执行后一次。

2 个答案:

答案 0 :(得分:5)

这是a) - 每次执行程序。当执行程序集的位时,JITter会将它们编译并缓存在内存中。所以每个位在运行之前只编译一次,然后每次都在本机运行。但是,这些编译的位仅存储在内存中,并在程序终止后被丢弃。

如果您愿意,您可以使用ngen创建和缓存已编译的图像,在这种情况下,答案将变为C) - 一次,在执行之前。

一个重要的特例澄清(来自svick)。请注意,在Windows 8上,以.Net 4.5或更高版本为目标的程序集要么安装到GAC中,要么来自Windows应用商店,是automatic native image generation的候选对象。这些本机映像由计划的NGen任务根据使用情况创建。

答案 1 :(得分:0)

如果使用AnyCPU选项编译程序集,则会在执行时重新编译它以匹配当前平台。除此之外,JIT编译可以随时进行,例​​如,当你有泛型类时。