原文:[CLR via C#]1.5 本地代码生成器:NGen.exe 1. NGen.exe工具,可以在一个程序安装到用户计算机时,将IL代码编译成为本地代码.由于代码在安装时已经编译好,所以CLR的JIT编译器不需要再运行时编译IL代码了,这有助于提升程序的性能. 2. NGen.exe可以加快程序的启动速度,减少程序的工作集. 3. NGen.exe生成的文件存在以下问题:     1)没有知识产权保护.在运行时,CLR要求访问程序集的元数据,这就要求同时发布包含IL代码和元数据的程序集.…
前言 在看<CLR>的时候,作者在开篇的时候提到了NGen.exe,前面一节执行程序集的代码中提到:程序或方法执行前会执行MSCorEE.dll中的JIT函数把要执行方法的IL转换成本地的CPU指令,讲代码放在内存块中,第二次调用方法的时候,由于已对方法进行了验证和编译,所以会直接执行内存块中的代码,不需要再执行JIT函数编译了.因为在方法没调用之前都会要调用JIT函数编译,在这一节的最后作者也提到,通过实验表明,CLR的JIT编译器似乎没有使自己的应用程序达到应有的性能,然后就提到了.Net…
一.JITCompiler 如你所知,JIT(just-in-time或“即时”)编译器是CLR的重要组件,它的职责是将IL转换成本地cpu指令. <<CLR via C#>>一书中在CLR的执行模型章节里有一副图形象介绍了一个方法(WriteLine)首次调用时发生的事情: JITCompiler函数被调用时,它知道要调用的是哪个方法,以及具体是什么类型定义了该方法.然后,JITCompiler会在定义该类型的程序集的元数据中查找被调用的方法的IL,接着JITCompiler验证…
一.JITComplier 如你所知,JIT(just-in-time或“即时”)编译器是CLR的重要组件,它的职责是将IL转换成本地cpu指令. <<CLR via C#>>一书中在CLR的执行模型章节里有一副图形象介绍了一个方法(WriteLine)首次调用时发生的事情: JITComplier函数被调用时,它知道要调用的是哪个方法,以及具体是什么类型定义了该方法.然后,JITComplier会在定义该类型的程序集的元数据中查找被调用的方法的IL,接着JITComplier验证…
本机映像生成器创建托管程序集的本机映像,并且将该映像安装到本地计算机的本机映像缓存中.本机映像缓存是全局程序集缓存的保留区域.一旦您为某个程序集创建了本机映像,运行库在每次运行该程序集时就会自动使用该本机映像.不必执行任何其他的过程就可使运行库使用本机映像.在程序集上运行Ngen.exe 可以提高程序集的加载和执行速度,原因是它可以从本机映像缓存中还原代码和数据结构,而不是动态生成它们.        问:C#写的程序能编译成本机代码吗?         答:可以,使用Ngen.exe即可以MS…
深入本机影像生成器(Ngen.exe)工具使用方法详解 先介绍一点背景知识:.Net程序在运行时会实时(JIT)编译,将.Net程序文件编译成cpu认识的汇编机器码.实时编译需要消耗额外的cpu和内存资源,这对于服务器端程序是无关紧要的,因为实时编译只在程序第一次运行时编译,之后就不需要再做了:如果你在做的是一个较大的winform程序或者silverlight等客户端程序时就需要考虑提前编译了..Net framework安装目录下(类似C:\Windows\Microsoft.NET\Fra…
首先放出官方MSDN的文档地址 Mpgo.exe 主要用于分析程序集启动时需要哪些东西,然后将信息反馈给NGen.exe 来更好的优化本机映像,使得应用程序启动更快,工作集缩小.准备发布时,用MPGO工具启动它,走一遍程序的常规任务.与所执行代码相关信息就会写入profile并嵌入程序集文件中. Ngen.exe 利用这些profile数据来更好地优化它生成本机映像.…
1. 概述 本章主要是介绍从源代码到可执行程序的过程中,CLR所做的工作. 2. 名词解释 ① 公共语言运行时(Common Language Runtime, CLR),是一个可由多种语言使用的 运行时,核心功能(内存管理.程序集加载.安全性.异常处理和线程同步)可由面向CLR的所有语言使用. ② PE32:32位 Microsoft Windows 可移植执行体.    PE32+:64位 Microsoft Windows 可移植执行体. ③ 元数据 是一组数据表,这些数据表描述了 模块中…
1.           CLR C#.NET 平台下,代码是怎么运行的 源代码-->托管模块-->程序集-JIT->编程CPU指令 1.1     在.NET框架下,首先将源代码编译为托管模块 CLR编译过程:C#源码文件--(C#编译器编译)-->托管模块 托管模块是一个需要CLR环境才能执行的标准windows PE文件,包含IL和元数据以及PE表头和CLR表头. iL:又叫托管代码,是编译器编译原文件后产生的指令,CLR会在运行时将IL编译成本地CPU指令. 元数据实际上是…
.Net 从代码生成到执行,这中间的一些列过程是一个有别于其他的新技术新概念,那么这是一个什么样的过程呢,有什么样的机制呢,清楚了这些基本的东西我们做.Net的东西方可心中有数.那么,CLR的执行模型是一个什么样的过程呢? 将源代码编译成托管模块 --> 将托管模块合并成程序集 --> 加载公共语言运行时 --> 执行程序集的代码 目录 将源代码编译成托管模块 将托管模块合并成程序集 加载公共语言运行时 执行程序集的代码 本地代码生成器:NGen.exe Framwork类库入门 通用类…