新问题:
使用Microsoft .NET框架编写的程序是否编译/执行本机代码?
我不是说如果有办法不在机器上安装.net框架.简单地说:.net应用程序是否运行在另一层,如Java(即字节码).
.NET应用程序必须在公共语言运行时(CLR)上运行.
CLR是Microsoft对CLI标准的实现.(除了Microsoft .NET Framework之外,还有其他CLR实现,即:Mono,Portable.NET).
CLR执行一种称为通用中间语言(CIL)的字节码.
有点..NET编译器将您的源代码编译为IL(一种中间语言),并将其打包在您部署的程序集(通常是一个.DLL或.EXE文件)中.在运行时,它由CLR(公共语言运行库)托管,CLR负责执行代码,强制执行安全规则等.用于Windows的主桌面CLR(还有其他像Mono和Silverlight)在执行方法(函数)之前不会解释IL,而是将"JIT"(只是及时编译)IL代码解释为本机代码.
请注意,实时编译实际上有一些性能优势.例如,CLR可以优化它基于它是在像类型的CPU,CPU的高速缓存大小,CPU数,RAM大小等运行的机器的性能特征的本机代码的编译器传统不能做到这一点,因为它们不知道他们生成的代码最终将在哪个机器上执行.
此外,组件可以是"预实时编译的"使用一种称为工具NGEN.在这个过程中的本机代码被从IL被执行并缓存在磁盘上之前的组装编译.这样,在运行时不会产生JITting开销.