通用语言运行时---.NET开发的‘基本内功’
2010-06-01 22:47
267 查看
1.通用语言运行时
1.1概述:.net框架中的任何东西都依赖CLR;建立与CLR之上的软件,称为托管代码。
1.2 CTS(通用类型系统):定义了核心语义没有定义语法,定义了值类型和引用类型
1.2.1值类型:都继承自ValueType;Byte、Char、int16、int32、int64、Uint16、Uint32、Uint64、Single、Double
1.2.2引用类型:
类型成员:方法(Methods)、字段(Fields)、事件(Events)、属性(Properties)
引用类型:Class,InterFace,Array,Delegate
1.2.3 两者区别:前者的实例被分配于堆栈,后者则只不过是一个位于堆栈的引用,指向一个被分配于堆的实值。
1.3 CLS(通用语言规范):定义了一个庞大的CTS子集,任何语言如果想和其他的CLS语言互通,都必须遵从它。
1.4编译托管代码
1.4.1MSIL(微软中间语言):定义了一套虚拟指令集,是CLR的汇编语言。含有操作堆栈的MSIL指令。
1.4.2Metadata(元数据):描述这些类及定义于此文件中
1.5 程序集
1.5.1定义:程序集是一个逻辑上的构建,并不存在什么单一文件将所有必要的文件包裹成一个程序集.
1.5.2 特点:一个程序集可以由单一文件或一组文件构成.对于一个”单文件程序集”,清单存储于文件自身.对于一个”多文件程序集”,清单存储在程序集的头文件中.
1.5.3 分类:静态程序集—由VS程序生成,其内容被存储于磁盘上(一般CS程序).
动态程序集—直接在内存中生成,而后立即运行(asp.net所创建的).
1.6 运行托管代码
1.6.1 装载:CLR确定程序版本,CLR在GAC中查找,CLR检查应用程序配置文件内的codebase元素.
1.6.2 编译MSIL:CLR在装载完后,然后在每个方法第一次被调用时编译它,称为即时编译(JIT)
注:被JIT编译后的本地代码并未被保存于磁盘上,而是每次装载程序时都执行JIT
1.6.3 创建本地映像:用工具Ngen.exe生成制定程序集和制定处理器的MSIL代码到本地.
1.7 垃圾回收
1.7.1 启动:当CLR注意到堆被占满,便自动运行垃圾回收
1.7.2 原理:它扫描堆,寻找任何种类的垃圾(在堆上,没有被任何堆栈上的对象引用),搞清楚堆内那一部分是垃圾,它重新排列堆内容,更加紧密地排列那些还被使用的值.
1.7.3 策略:随着时间推移,具有较长寿面的对象,会被搬移到HEAP(堆)尾部.在真实的软件里头,新生成的对象,也是最容易称为垃圾的对象.故搜新垃圾时先搜索最新分配的对象所在的地点.如果释放不够,则会搜索前一代对象,仍释放不够,则搜索全部对象.
1.7.4 终结器(Finalizers):开发人员可以重写对象的终结器,在一个拥有终结器的对象被释放前,这个特殊的方法将被记录在终结列表.最终这个列表中的所有终结器都会被调用.
1.8应用程序域
1.8.1运行期宿主:它装载并初始化CLR,然后通常把控制权转给托管代码.
1.1概述:.net框架中的任何东西都依赖CLR;建立与CLR之上的软件,称为托管代码。
1.2 CTS(通用类型系统):定义了核心语义没有定义语法,定义了值类型和引用类型
1.2.1值类型:都继承自ValueType;Byte、Char、int16、int32、int64、Uint16、Uint32、Uint64、Single、Double
1.2.2引用类型:
类型成员:方法(Methods)、字段(Fields)、事件(Events)、属性(Properties)
引用类型:Class,InterFace,Array,Delegate
1.2.3 两者区别:前者的实例被分配于堆栈,后者则只不过是一个位于堆栈的引用,指向一个被分配于堆的实值。
1.3 CLS(通用语言规范):定义了一个庞大的CTS子集,任何语言如果想和其他的CLS语言互通,都必须遵从它。
1.4编译托管代码
1.4.1MSIL(微软中间语言):定义了一套虚拟指令集,是CLR的汇编语言。含有操作堆栈的MSIL指令。
1.4.2Metadata(元数据):描述这些类及定义于此文件中
1.5 程序集
1.5.1定义:程序集是一个逻辑上的构建,并不存在什么单一文件将所有必要的文件包裹成一个程序集.
1.5.2 特点:一个程序集可以由单一文件或一组文件构成.对于一个”单文件程序集”,清单存储于文件自身.对于一个”多文件程序集”,清单存储在程序集的头文件中.
1.5.3 分类:静态程序集—由VS程序生成,其内容被存储于磁盘上(一般CS程序).
动态程序集—直接在内存中生成,而后立即运行(asp.net所创建的).
1.6 运行托管代码
1.6.1 装载:CLR确定程序版本,CLR在GAC中查找,CLR检查应用程序配置文件内的codebase元素.
1.6.2 编译MSIL:CLR在装载完后,然后在每个方法第一次被调用时编译它,称为即时编译(JIT)
注:被JIT编译后的本地代码并未被保存于磁盘上,而是每次装载程序时都执行JIT
1.6.3 创建本地映像:用工具Ngen.exe生成制定程序集和制定处理器的MSIL代码到本地.
1.7 垃圾回收
1.7.1 启动:当CLR注意到堆被占满,便自动运行垃圾回收
1.7.2 原理:它扫描堆,寻找任何种类的垃圾(在堆上,没有被任何堆栈上的对象引用),搞清楚堆内那一部分是垃圾,它重新排列堆内容,更加紧密地排列那些还被使用的值.
1.7.3 策略:随着时间推移,具有较长寿面的对象,会被搬移到HEAP(堆)尾部.在真实的软件里头,新生成的对象,也是最容易称为垃圾的对象.故搜新垃圾时先搜索最新分配的对象所在的地点.如果释放不够,则会搜索前一代对象,仍释放不够,则搜索全部对象.
1.7.4 终结器(Finalizers):开发人员可以重写对象的终结器,在一个拥有终结器的对象被释放前,这个特殊的方法将被记录在终结列表.最终这个列表中的所有终结器都会被调用.
1.8应用程序域
1.8.1运行期宿主:它装载并初始化CLR,然后通常把控制权转给托管代码.
相关文章推荐
- (读书笔记).NET大局观—通用语言运行时
- .NET程序中的开发和运行基本环境是什么?
- C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 成熟组件化运行效果分解
- C#与.NET程序员面试宝典 2.2.6 面试题13:.NET程序的开发和运行基本环境是什么
- asp.net mvc 2 简简单单做开发 通用增删改基本操作通用页面
- TIOBE 2006年7月最流行开发语言排名 VB.Net再度下滑
- 有简易通用权限管理后台的快速C# ASP.NET开发的例子应用程序卖给了曾长期开发JAVA银行程序的大哥
- TIOBE 2006年7月最流行开发语言排名 VB.Net再度下滑
- 有简易通用权限管理后台的快速C# ASP.NET开发的例子应用程序卖给了曾长期开发JAVA银行程序的大哥
- KOTLIN开发语言文档(官方文档) -- 2.基本概念
- C#.NET 大型通用信息化系统集成快速开发平台 4.0 版本 - 导入导出Microsoft Excel 2010的例子
- C#.NET 大型通用信息化系统集成快速开发平台 4.0 版本 - 拆分表、联系方式的拆分?
- ASP.NET 2.0服务器控件开发之基本概念篇
- IOS开发语言OC的基本语法以及结构
- ASP.NET Aries 入门开发教程1:框架下载与运行
- Asp.Net Ajax的两种基本开发模式
- 使用VS2008开发运行在.net 2.0环境下的 ASP.NET AJAX 网站
- ASP.NET Core开发-Docker部署运行
- 编写执行你的第一个Yukon CLR(通用语言运行时)存储过程
- .Net Core Linux centos7行—vscode开发,linux部署运行