Ngen.exe和本机映像缓存

简介: 本机映像生成器创建托管程序集的本机映像,并且将该映像安装到本地计算机的本机映像缓存中。本机映像缓存是全局程序集缓存的保留区域。一旦您为某个程序集创建了本机映像,运行库在每次运行该程序集时就会自动使用该本机映像。

 本机映像生成器创建托管程序集的本机映像,并且将该映像安装到本地计算机的本机映像缓存中。本机映像缓存是全局程序集缓存的保留区域。一旦您为某个程序集创建了本机映像,运行库在每次运行该程序集时就会自动使用该本机映像。不必执行任何其他的过程就可使运行库使用本机映像。在程序集上运行Ngen.exe 可以提高程序集的加载和执行速度,原因是它可以从本机映像缓存中还原代码和数据结构,而不是动态生成它们。 
       问:C#写的程序能编译成本机代码吗?  
       答:可以,使用Ngen.exe即可以MSIL代码编译为本机代码。  
       这样回答错了吗?其实,严格的说,这个回答是没错的,Ngen.exe的确是可以将MSIL 编译为本机代码,并可以使JIT不需要进行再次编译MSIL。这样能加快程序的执行效率。  
       但用户这样的问题其实,并不是对执行效率不满意,而是对中间语言不满意,可惜   Ngen   并不能解决用户的问题。  
       让我们来浅浅的分析一下Ngen的工作吧。  
       Ngen是MS提供的本机映象生成器,它可以将中间语言程序集编译为本机代码存放在缓存中。这里请大家注意,是存放在缓存中,Dotnet在内存中建立了一个缓存,这个缓存中存放了许多常用的程序集编译后的本机代码,它们是常驻的,由此来加快Dotnet的执行速度。  
       所谓一个本机代码,因为本机映射时,会映射出一些 Framework里需要的Method,编译为汇编就是Call   0x0200000这样的样子,而这些东西必须是事件编译好的。那么理论上说Ngen必须要在当前执行的机器上运行,而直接编译成本机代码的程序copy到另一个地方不一定可以用,而且我一直没有找到能将缓存中的本机代码copy出来的方法。  
      讲到这里,不知道大家明白我的意思没有,不管如何Ngen.exe只是一个提速的工具,因为要执行编译为本机代码必须还是要原程序集,而原程序集中存在MSIL,所以让程序无法脱离被反编译的目地。  
      如果有空,您可以做做试验。  
      Ngen   /show   就可以看到缓存中所有的已编译好的程序集,所以Dotnet并不慢。  
      Ngen   <assembly   path   or   display   name>   可以把指定程序集映象为本机代码。  
      Ngen   /?   可以看到其它参数  

作者:Bonker
出处:http://www.cnblogs.com/Bonker
QQ:519841366
       
本页版权归作者和博客园所有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利
目录
相关文章
|
7月前
|
Windows
Windows常见可读写目录的探测
Windows常见可读写目录的探测
95 0
Windows常见可读写目录的探测
|
7月前
|
存储
wsl的存储路径
wsl的存储路径
|
7月前
|
安全 数据库 数据安全/隐私保护
获取主机已安装程序的多种方式
获取主机已安装程序的多种方式
133 0
获取主机已安装程序的多种方式
|
10月前
|
缓存 Windows
清理windows缓存bat脚本
清理windows缓存bat脚本
274 0
|
Java Linux Windows
LINUX虚拟机与WINDOWS主机,直接复制交换文件会有问题
LINUX虚拟机与WINDOWS主机,直接复制交换文件会有问题
100 0
|
Windows
synctoy 本机同步的最好的软件 本机不同目录 本机硬盘与移动硬盘同步
synctoy 本机同步的最好的软件 本机不同目录 本机硬盘与移动硬盘同步
653 0
synctoy 本机同步的最好的软件 本机不同目录 本机硬盘与移动硬盘同步
|
Web App开发 Linux iOS开发
CrossOver 2022无需虚拟机即可运行win系统exe文件
今晚有一个学习群的同学在mac上安装了一款只适用于win的软件。安装方法:先安装crossover这款软件。(本人没用过苹果笔记本,对苹果笔记本完全不了解的状态,如果mac需要安装一些win软件的话,可以自己了解一下)
305 0
|
Linux 网络安全
linux实用技巧:从另一台机子上拷贝文件到本机,从本机拷贝文件到另一台机子(远程拷贝scp)
linux实用技巧:从另一台机子上拷贝文件到本机,从本机拷贝文件到另一台机子(远程拷贝scp)
linux实用技巧:从另一台机子上拷贝文件到本机,从本机拷贝文件到另一台机子(远程拷贝scp)
|
Java Windows
一条命令解决macmnsvc.exe占用8081端口的问题
无法杀掉macmnsvc.exe进程,一条命令解决macmnsvc.exe占用8081端口的问题!
491 0
一条命令解决macmnsvc.exe占用8081端口的问题