各位朋友:   想必大家都知道.Net SDK自带一个Ngen.exe工具,即“Native Image Generator”。我在一些资料上看到,此工具可以将程序集中的IL代码转换成本地的CPU指令序列。   但是我不清楚它到底是怎么一个转换方式:
   1.将某个.exe程序集转化成完全由本地的CPU指令序列构成的可执行文件,进而可以在不安装.net的情况下直接运行。
   2.只是将程序集中的IL指令代码转换成本地CPU指令序列,而程序集的元数据仍然保持不变。
   3.将程序集中的IL指令代码转换成本地CPU指令序列,然后将此指令序列存储到某一个磁盘文件中。
   ...   我之所以有这么多的“联想”,是因为我在对某个特定程序集运行此工具时,没有发现任何变化。具体是这样的:
   运行命令:(在这里,ConsoleApplication1.exe是我创建的一个控制台程序)
   D:\c#>ngen ConsoleApplication1.exe
   显示:
   Microsoft (R) CLR Native Image Generator - Version 1.1.4322.573
   Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.
   ConsoleApplication1, Version=1.0.2153.32239, Culture=neutral, PublicKeyToken=null <debug>   运行完命令后,没有任何变化:我仍然可以用ildasm将ConsoleApplication1.exe打开,证明它还是一个程序集,而并没有变成本地代码;而且也没有生成任何新的文件(来存储本地指令序列)!   我很困惑,不知道怎么回事儿,Ngen.exe到底是干什么用的呢?   希望各位高手指点一二,谢谢!

解决方案 »

  1.   

    我看了半天MSDN 也没看懂 不过似乎native image是安装在native image cache的 并不是替代原来的asssembly
      

  2.   

    本机映像生成器创建托管程序集的本机映像,并且将该映像安装到本地计算机的本机映像缓存中。本机映像缓存是全局程序集缓存的保留区域。一旦您为某个程序集创建了本机映像,运行库在每次运行该程序集时就会自动使用该本机映像。不必执行任何其他的过程就可使运行库使用本机映像。在程序集上运行 Ngen.exe 可以提高程序集的加载和执行速度,原因是它可以从本机映像缓存中还原代码和数据结构,而不是动态生成它们。