首先.NET代码编译为MSIL,然后JIT将其转换为机器相关代码。任何人都可以告诉我因为2步编译而获得的所有好处。谢谢
答案 0 :(得分:20)
有几个原因。首要的可能是使其跨平台。如果C#或其他.NET语言直接编译为本机代码,则必须为它们运行的每个平台重新编译它们。使用VM,所有代码都可以保存为中间格式,您只需要为每个平台编写VM实现。
此外,通过使用与语言无关的中间语言,您可以使用许多高级语言(C#,VB.NET,Python等),这些语言都引用了用其他语言编写的程序集。由于它们都编译成相同的东西,它们可以相互无缝地工作。
还有性能优势。 JIT编译器可以专门针对当时运行代码的机器进行积极的优化。我不知道.NET JIT编译器在这个意义上做了多少优化,但是可以获得非常大的理论上的好处。
答案 1 :(得分:6)
答案可以在MSDN
找到答案 2 :(得分:1)
可执行文件未绑定到平台。例如,XNA同时针对PPC(Xbox360)和x86处理器。有些程序将在Linux或OSX上的Mono上运行。
它允许您更好地优化目标计算机或替换缺少的功能:
答案 3 :(得分:1)
首先从高级语言转换到机器级,这就是.Net平台的设计方式。第一层用MSIL处理高级语言,第二层可以专注于hitch&将MSIL转换为机器级代码的平台故障。它主要支持语言互操作性,并且可能在不久的将来,当Mono等项目获得更多优势时,它还将提供跨平台支持。