DotNet 中CLR的运行和编译模式

转载 2006年05月27日 12:24:00

.NET程序运行前必须编译,被编译后的程序代码不包括汇编程序指使,而是包括MSIL(Microsoft Intermediate Language指命,它是一种非常低级的语言,可以快速地由(JIT编译)为内部机械代码!

  携带编译好的程序的软件包由许多装配件组成。每个装配件都包含中间语言代码,也包含元数据,代描述装配件中的数据类型和方法。元数据还包括装配件内容的一个简单散列,用于验证该装配件没有被塞满,它还包含版本信息,该装配件调用其它装配件的信息,以及控制权限的信息,代码必须有这些权限才能运行。该程序包含许多装配件,其中一个装配件被指定为一个可执行程序,包含主程序的激活入口点,其它装配件则指定为库。

  当运行程序时,CLR首先会加载第一个装配件-包括程序主入口的装配件。第二步就是验证代码的“内存类型的安全性”。如果代码只以CLR可以控制的方式访问内存,它就是安全的内存类型。其重要性在于内存类型安全的代码可以保证不读写不属于它的任何内存。这是很重要的,因为.NET有一种机制(应用域),允许多个应用程序运行在同一个过程中,如果是这样,就需要保证任何应用程序都不会访问其它应用程序的内存。如果CLR不能验证代码是内存类型安全的,根据本地安全策略,它就会拒绝运行代码。CLR最后就会运行代码。它为运行的代码创建一个过程,并标记应用域,在该域中放入程序的主纯种。在某些情况下,程序可以请求不放在与其它运行代码相同的过程中,此时CLR只会为该程序创建一个新的应用域。然后,CLR提取代码中需要运行的第一部分,把它从中间语言编译为汇编语言,再在合适的程序纯种中执行它,每次执行流到达一个以前没有执行过的新方法时,该方法就会编译为可执行代码。但这个编译过程只进行一次。该方法编译的、完后,其入口的地址就被编译好的可执行代码地址所替换。这样,就维护了性能,因为代码中只有实际要使用的部分才会被编译。这个过程称为just-in-time编译。注意JIT编译器在编译时,会根据在装配件中指定的编译设置优化代码。运行代码时,CLR会监视其内存的使用。根据监视结果,它在某些情况下会临时中断执行一小段时间(一般是几毫秒),调用无用存储单元收集器,检查程序中的变量,以确定哪些内存区域仍处于满打满算状态,即代码仍在使用它们,而释放不再使用的区域。

混合语言编程:启用CLR(公共语言运行时编译)让C#调用C++

让C#调用C++前言关于混合C#和C++的编程方式,本人之前写过一篇博客(参见混合语言编程:C#使用原生的Directx和OpenGL),在之前的博客中,介绍了在C#的Winform和WPF下使用原生...
  • taonull
  • taonull
  • 2016年09月21日 11:41
  • 1499

2017-03-05 CentOS中配置守护服务(Supervisor)监听dotnet core web程序的运行

我们继续解决上篇博客的问题,我这个人有个毛病,不喜欢遗留什么问题,也不喜欢问题说不明白,具体要怎么解决一定要详尽,因为经常自己遇到问题的时候,去翻别人的博客,就会遇到这样的问题,很苦恼,又说废话了。 ...

通过MSIL了解CLR的运行原理

  • 2007年10月14日 13:35
  • 39KB
  • 下载

改造独立部署(SCD)模式下.NET Core应用程序 dotnet的exe文件启动过程

设置一个小目标 改造前   改造后     独立部署SCD模式,是指在使用dotnet publish 命令时带上-r 参数运行时标识符(RID)。  目标提...
  • sD7O95O
  • sD7O95O
  • 2017年11月30日 00:00
  • 16

dotNet4.0运行环境

  • 2016年12月13日 15:30
  • 59.03MB
  • 下载

DotNet Garbage Collection的工作模式

    GC的工作模式分3种,Workstation GC with Concurrent GC off、 Workstation GC with Concurrent GC on、Server GC...
  • isline
  • isline
  • 2011年05月30日 15:12
  • 530

C#中CLR(公共语言运行时)与IL(中间代码)

.net平台中的CLR首先要说明的是,.NET平台与C#不是一回事 它是C#,VB.net等程序运行的平台。CLR是公共语言运行时,是 .NET Framework的重要组成部分。它提供了内存管理...
  • Pwiling
  • Pwiling
  • 2016年05月20日 15:00
  • 6612

CLR(公共语言运行时)

CLR(公共语言运行库,Common Language Runtime)和Java虚拟机一样也是一个运行时环境,是一个可由多种编程语言使用的运行环境。CLR的核心功能包括:内存管理、程序集加载、安全性...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DotNet 中CLR的运行和编译模式
举报原因:
原因补充:

(最多只允许输入30个字)