源代码代码第一次编译形成IL中间语言的托管代码,在运行时被Class Loader装载后进行JIT第二次编译形成托管的本地代码。在执行过程中,它会不断地检查当前我们执行的代码的安全性和规范性。

  Class Loader在装载可执行程序exe或者动态链接库dll的时候,它不是把所有的exe和dll当中的类库全部装载到内存里面。它是先装载一部分,即Main函数所在的文件,然后在执行过程中Class Loader会不断地判断当前执行过程中所要调用的方法是否已被装载到内存中了,如果没有,它会实时地去装载一些没有被装载的代码。装载进来之后,被编译为托管的本地代码,然后调用。

程序集(Assemblies)

1、一个程序集是一组类型和资源的集合,共同组成一定的逻辑功能,包含一个类型或程序的清单(manifest),类型原数据,MSIL,资源。

  程序集清单描述了应用程序集里面都有哪些类型,这些程序都存放在什么地方。它规定了我们的这些代码都在什么地方,可能在磁盘的某个位置,另外的一部分资源可能在Internet上。Manifest最终被Class Loader所用,Class Loader在动态加载类库的时候,就需要知道类库在哪个位置的哪个文件里。我们在编写应用程序的时候,实际上我们可以把程序集清单里面的Assembly的位置描述为在一个互联网上的Http地址,Class Loader在实时地加载这个类的时候它会从Http这个路径去加载远程服务器上的Library过来,这样就实现了零部署,我们不用在更新了Dll之后强迫客户端更新。

2、所有能够部署的单元都是编译过的MSIL(可执行的中间代码):轻便的可执行文件(PE file)EXE或者是DLL

  在.NET Framework程序在执行的时候,它有一个公共类型系统,这些公共类型系统的实现都在CLR里面。我们在运行程序的时候,使用到了大量的Framework中所定义好的类库,而客户端在执行应用程序的时候实际上已经安装了Framework,也就是说它已经帮我们在客户端部署了很多已经存在的功能。我们的程序在完成后,有很多类库不需要包装在我们的执行文件里面,我们只需要把执行文件放到客户端,去调用客户端的Framework里面的类库。这样我们编写的应用程序规模就很小,但它执行起来内存占用量比较大。

3、可以用ILDASM和反射(Reflection)来检查程序集

4、可以是单一的文件或多个文件

.NET Framwork 之 托管代码的执行过程的更多相关文章

  1. C#在.NET编译执行过程

    1..NET语言的编译器接受源代码文件,并生成名为程序集的输出文件. 程序集要么是可执行的,要么是DLL 程序集里的代码并不是本机代码,而是一种名称为CIL的中间语言 程序集包含如下信息: 程序的CI ...

  2. ASP.NET Web API 过滤器创建、执行过程(二)

    ASP.NET Web API 过滤器创建.执行过程(二) 前言 前面一篇中讲解了过滤器执行之前的创建,通过实现IFilterProvider注册到当前的HttpConfiguration里的服务容器 ...

  3. ASP.NET Web API 过滤器创建、执行过程(一)

    ASP.NET Web API 过滤器创建.执行过程(一) 前言 在上一篇中我们讲到控制器的执行过程系列,这个系列要搁置一段时间了,因为在控制器执行的过程中包含的信息都是要单独的用一个系列来描述的,就 ...

  4. ASP.NET Web API 控制器执行过程(一)

    ASP.NET Web API 控制器执行过程(一) 前言 前面两篇讲解了控制器的创建过程,只是从框架源码的角度去简单的了解,在控制器创建过后所执行的过程也是尤为重要的,本篇就来简单的说明一下控制器在 ...

  5. Struts2拦截器的执行过程浅析

    在学习Struts2的过程中对拦截器和动作类的执行过程一度陷入误区,特别读了一下Struts2的源码,将自己的收获分享给正在困惑的童鞋... 开始先上图: 从Struts2的图可以看出当浏览器发出请求 ...

  6. 通过源码了解ASP.NET MVC 几种Filter的执行过程

    一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神的工作,而且很多人觉得平时根本不需要知道这些,会用就行了.其实阅读源 ...

  7. Hadoop MapReduce执行过程详解(带hadoop例子)

    https://my.oschina.net/itblog/blog/275294 摘要: 本文通过一个例子,详细介绍Hadoop 的 MapReduce过程. 分析MapReduce执行过程 Map ...

  8. 高程(4):执行环境、作用域、上下文执行过程、垃圾收集、try...catch...

    高程三 4.2.4.3 一.执行环境 1.全局执行环境是最外层的执行环境. 2.每个函数都有自己的执行环境,执行函数时,函数环境就会被推入一个当前环境栈中,执行完毕,栈将其环境弹出,把控制器返回给之前 ...

  9. saltstack命令执行过程

    saltstack命令执行过程 具体步骤如下 Salt stack的Master与Minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc salt ...

随机推荐

  1. php导出excel时间错误(同一个时间戳,用date得到不同的时间)

    通过在date之前设置时区解决了 date_default_timezone_set("Asia/Shanghai"); $schedule_time = date("Y ...

  2. ubuntu安装wine

    1.安装源 sudo add-apt-repository ppa:wine/wine-builds sudo apt-get update 2.安装wine sudo apt-get install ...

  3. python基础day4

    1.列表生成式,迭代器&生成器 列表生成式 将列表[0,1,2,3,4,5,6,7,8]中的每个值加1,如何实现?常用的几种方法 方法一: a=[0,1,2,3,4,5,6,7,8] for ...

  4. Oracle 索引扫描的五种类型

    之前在讨论CBO和RBO的时候提到了索引扫描的几种类型. Oracle Optimizer CBO RBO http://blog.csdn.net/tianlesoftware/archive/20 ...

  5. 进入bios后没有usb启动项怎么办

    开机按DEL进入BIOS(现在还这么说吧,不同的主板进入方法不太一样),找到BOOT选项. 选择Boot mood:legacy support(引导模式,逻辑支持) boot priorty:leg ...

  6. CSS 笔记——选择器

    1. 选择器 (1)类型选择器(标签选择器) 基本语法 E { sRules } 使用说明 类型选择器.以文档对象(Element)类型作为选择器. 选择面较大,适合做某种标签元素外观的常规设置. 代 ...

  7. [JSOI2017]原力(分块+map(hash))

    题目描述 一个原力网络可以看成是一个可能存在重边但没有自环的无向图.每条边有一种属性和一个权值.属性可能是R.G.B三种当中的一种,代表这条边上 原力的类型.权值是一个正整数,代表这条边上的原力强度. ...

  8. [BZOJ2595]游览计划

    斯坦纳树居然不是数据结构... 斯坦纳树应该是类似最小生成树的问题,只不过它允许增加额外的点 比如这道题就是找关于景点的最小生成树,但还要付出最小的代价,加一些额外的格子把景点都连起来 套路是设$f_ ...

  9. python基础--接口与归一化设计、封装、异常、网络编程

    1 接口与归一化设计 1.1 归一化概念: 归一化的好处: 1.归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了,这极大降低了使用者的使用难度. 2.归一化使得高层的外部 ...

  10. keytool工具生成自签名证书并且通过浏览器导入证书

    1.生成服务器证书库 keytool -genkey -alias tomcat -keypass changeit -keyalg RSA -keysize 1024 -validity 365 - ...