【问题标题】:How many times is .NET compiling IL.NET编译IL多少次
【发布时间】:2014-07-12 23:10:49
【问题描述】:

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

我的问题是: IL语言编译多少次: a) 每次从执行应用程序的开始。 b) 一次,在第一次执行之后。

【问题讨论】:

  • 我很好奇这会如何随着即将到来的 .Net Native 而改变。

标签: .net compilation jit il


【解决方案1】:

这是 a) - 每次执行程序。随着程序集的一部分被执行,JITter 编译它们并将它们缓存在内存中。因此,每个位在运行之前只编译一次,然后每次都在本机运行。但是,这些编译后的位只存储在内存中,在程序终止后被丢弃。

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

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

【讨论】:

  • 只是添加一个同步糖:a)是即时编译,c)是提前编译
  • 这在 Windows 8 中并不完全准确,因为它支持automatic ngen。
【解决方案2】:

如果程序集是使用 AnyCPU 选项编译的,那么它会在执行时重新编译以匹配当前平台。除此之外,JIT 编译可以在任何时候发生,例如当你有泛型类时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-26
    • 2011-02-05
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 2010-10-14
    相关资源
    最近更新 更多