【发布时间】:2014-07-12 23:10:49
【问题描述】:
我正在读第二本书,但仍然不明显。
我的问题是: IL语言编译多少次: a) 每次从执行应用程序的开始。 b) 一次,在第一次执行之后。
【问题讨论】:
-
我很好奇这会如何随着即将到来的 .Net Native 而改变。
标签: .net compilation jit il
我正在读第二本书,但仍然不明显。
我的问题是: IL语言编译多少次: a) 每次从执行应用程序的开始。 b) 一次,在第一次执行之后。
【问题讨论】:
标签: .net compilation jit il
这是 a) - 每次执行程序。随着程序集的一部分被执行,JITter 编译它们并将它们缓存在内存中。因此,每个位在运行之前只编译一次,然后每次都在本机运行。但是,这些编译后的位只存储在内存中,在程序终止后被丢弃。
如果您愿意,您可以使用ngen 来创建和缓存已编译的图像,在这种情况下,答案变为 C) - 执行前一次。
一个重要的特殊情况说明(来自svick)。请注意,在 Windows 8 上,一个面向 .Net 4.5 或更高版本的程序集,和要么安装到 GAC 中,要么来自 Windows 应用商店,是automatic native image generation 的候选对象。这些本机映像由计划的 NGen 任务根据使用情况创建。
【讨论】:
如果程序集是使用 AnyCPU 选项编译的,那么它会在执行时重新编译以匹配当前平台。除此之外,JIT 编译可以在任何时候发生,例如当你有泛型类时。
【讨论】: