我认为是IL,不知对否?
如果是IL,那么每次执行EXE就要进行一次编译?

解决方案 »

  1.   

    是IL代码 每次运行时由即时编译器(JIT)负责编译成本机代码,但是针对IL代码中的相同方法JIT只编译一次,然后将其缓存在动态内存中,下一次调用相同的方法或代码段时直接取用就行了.
      

  2.   

    那么是不是每次运行EXE都有一次编译过程,哪怕第二次运行的指令集与第一次完全相同?
      

  3.   

    都有.
    每个exe都有一条跳转到mscoree.dll的_CorExeMain函数的机器码.
    _CorExeMain会负责初始化运行环境并查找exe镜像中的IL并运行.
    剩下的同一楼.
      

  4.   

    .Net编译好的不是汇编指令,而是IL指令,Java是字节代码JIT 运行时.Net装载入口Assembly,CLR公共语言运行时运行代码创建主应用程序域,然后CLR提取代码从IL编译为汇编指令并执行,循环到第二部分代码每部分代码都是即时编译(JIT)。代码运行中CLR监视内存使用情况并处理垃圾回收等等。Java 不同的是编译为字节代码,字节代码有一套通用的语法,可以跨平台。字节代码是解释性的。Java程序的跨平台主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行,Java虚拟机中的interpreter(解释器)负责将字节码文件解释成为特定的机器码进行运行。
      

  5.   

    可以用系统提供的NGen.exe工具生成本地代码
    这样做的好处是加快启动速度,减小程序工作集,
    但是会降低性能
      

  6.   

    同意楼上的解释,NGen可以将IL预先编译为本地代码。但是这样会带来相应的问题。所以一般还是默认的IL好一些。