各位朋友: 想必大家都知道.Net SDK自带一个Ngen.exe的工具,即“Native Image Generator”,我在一些资料上看到此工具可以将程序集中的IL代码转换成本地的CPU指令序列。 但是我不清楚它到底是怎么一个转换方式:
1.将某个.exe程序集转化成完全由本地的CPU指令序列构成的可执行文件,进而可以在不安装.net的情况下直接运行。
2.只是将程序集中的IL指令代码转换成本地CPU指令序列,而程序集的元数据仍然保持不变。
3.将程序集中的IL指令代码转换成本地CPU指令序列,然后将此指令序列存储到某一个磁盘文件中。
... 我之所以有这么多的联想,是因为我在运用此工具时,没有发现任何变化。具体是这样的:
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> 在这里,ConsoleApplication1.exe是我创建的一个控制台程序。
运行完命令后,没有任何变化,我仍然可以用ildasm将ConsoleApplication1.exe打开,证明它还是一个程序集,而并没有变成本地代码;而且也没有生成任何新的文件! 我很困惑,不知道怎么回事儿,ngen.exe到底是干什么用的呢? 希望各位高手指点一二,谢谢!
1.将某个.exe程序集转化成完全由本地的CPU指令序列构成的可执行文件,进而可以在不安装.net的情况下直接运行。
2.只是将程序集中的IL指令代码转换成本地CPU指令序列,而程序集的元数据仍然保持不变。
3.将程序集中的IL指令代码转换成本地CPU指令序列,然后将此指令序列存储到某一个磁盘文件中。
... 我之所以有这么多的联想,是因为我在运用此工具时,没有发现任何变化。具体是这样的:
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> 在这里,ConsoleApplication1.exe是我创建的一个控制台程序。
运行完命令后,没有任何变化,我仍然可以用ildasm将ConsoleApplication1.exe打开,证明它还是一个程序集,而并没有变成本地代码;而且也没有生成任何新的文件! 我很困惑,不知道怎么回事儿,ngen.exe到底是干什么用的呢? 希望各位高手指点一二,谢谢!
但像gc等,没有运行时的话,怎么执行?
http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cptools/html/cpgrfnativeimagegeneratorngenexe.asp