我正在读第二本书但它仍然不明显。
我的问题是: 编译IL语言的次数: a)每次从一开始就执行申请。 b)首次执行后一次。
答案 0 :(得分:5)
这是a) - 每次执行程序。当执行程序集的位时,JITter会将它们编译并缓存在内存中。所以每个位在运行之前只编译一次,然后每次都在本机运行。但是,这些编译的位仅存储在内存中,并在程序终止后被丢弃。
如果您愿意,您可以使用ngen
创建和缓存已编译的图像,在这种情况下,答案将变为C) - 一次,在执行之前。
一个重要的特例澄清(来自svick)。请注意,在Windows 8上,以.Net 4.5或更高版本为目标的程序集和要么安装到GAC中,要么来自Windows应用商店,是automatic native image generation的候选对象。这些本机映像由计划的NGen任务根据使用情况创建。
答案 1 :(得分:0)
如果使用AnyCPU选项编译程序集,则会在执行时重新编译它以匹配当前平台。除此之外,JIT编译可以随时进行,例如,当你有泛型类时。