各位朋友: 想必大家都知道.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.将某个.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到底是干什么用的呢? 希望各位高手指点一二,谢谢!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货