Atitit. C#.net clr 2.0  4.0新特性

1. CLR内部结构1

2. CLR 版本发展史3

3. CLR 2.0
3

4. CLR 4 新特性 概览4

4.1.1.  托管与本地代码的互操作5

4.1.2.    垃圾回收6

4.1.3.    代码约定6

4.1.4.    Corrupted state exception6

4.1.5.     新的安全模型7

4.1.6.     同一个进程,多个CLR7

4.1.7.     基本类库7

5. CLR最新发展8

6. 参考8

1. CLR内部结构

  从上图可以看到CLR提供的功能,如类型安全(Type Checker)、垃圾回收(Garbage Collector)、异常处理(Exception Manager)、向下兼容(COM Marshaler)等,具体的说,.NET上的CLR为开发者提供如下的服务:

具体的说,.NET上的CLR为开发者提供如下的服务:

· 平台无关:CLR实际上是提供了一项使用了虚拟机技术的产品,他在操作系统之上,并不要求程序的运行平台是 Windows系统,只要是能够支持它的运行库的系统,都可以在上面运行.NET应用。所以,一个完全由托管代码组成的应用程序,只要编译一次,就可以在任何支持.NET的平台上运行.(从Mono的出现变得更加真实啦,不用再羡慕JAVA啦)

· 跨语言集成:CLR语序开发这以任何语言进行开发,用这些语言开发的代码,可以在CLR环境下紧密无缝的进行交叉调用,例如,可以用VB声明一个基类对象,然后在C#代码中直接创建次基类的派生类。

· 自动内存管理:CLR提供了拉架收集机制,可以自动管理内存。当对象或变量的生命周期结速后,CLR会自动释放他们所占用的内存.

· 跨语言异常处理

· 版本控制(避免了DLL灾难)

· .NET安全

· 简单的组件互操作性。

· 自描述组件:自描述组件是指将所有数据和代码都放在一个文件中的执行文件。自描述组件可以大大简化系统的开发和配置,并且改进系统的可靠性

2. CLR 版本发展史

  C#版本 和.Net Framework 版本以及CLR依赖关系 和新特性添加列表,

作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

3. CLR 2.0

CLR 在.NET框架中所处的位置

CLR作为.NET框架中的一部分,总是跟着.NET发行,但是近年来.NET的发行版本从2.0一直到3.5, 但是CLR却还一直保留在2.0,如下表所示:

.NET框架版本

时间

CLR

1.0

2002.2

1.0

1.1

2003.4

1.1

2.0 (Generics)

2006.1

2.0

3.0 (WPF/WCF/WF)

2006.11

2.0

3.5 (LINQ)

2007.11

2.0

4.0 Beta

2009.5

4.0

图二 CLR 版本

大家可以看到,2.0的发行已经是三年之前的事情了,在这几年中,CLR小组的工作最后都汇集在了这次发行之中,可谓是众星云集,下面我们一一叙来。

4. CLR 4 新特性 概览

.NET 4中发布了最新版本的公共语言运行时,简称CLR (Common Language Runtime) 。这个版本是CLR 2.0之后又一个新的版本,包含着CLR小组几年以来的辛勤工作。

4.1.1.  托管与本地代码的互操作

托管代码与本地代码之间的互操作(interop)担负着.NET世界对外联系的责任。比如调用一个本地dll或者COM组件。在CLR 4中,我们作了以下工作,来提高互操作的易用性。

1. 自定义QI(Custom QI)

当托管代码被COM调用的时候,它扮演着COM组件的角色。对于COM组件来说,IUnknown::QueryInerface(QI)是类型转化的关键。CLR4之前,为每个托管COM组件提供了一个QI实现; CLR4 允许用户自定义QI,大家可以从mscorlib中新增的interface,System.Runtime.InteropServices.ICustomQueryInterface着手了解这一新功能。

2. TlbImp源代码以及自定义工具

在托管代码中调用COM组件,需要这个COM组件用托管语言申明自己的接口,也就是Interop Assembly(IA)。在一般情况下,用户不需要自己动手撰写这些assembly,而可以使用TlbImp这个工具,根据TLB生成IA。在CLR 4的开发中,我们用托管代码把TlbImp重写了,并且把源代码公布在了codeplex上面。

发布TlbImp的源代码的好处之一,是方便使用者根据自己的需求,通过修改源代码来自拓展TlbImp的功能。我们也收集了很多客户需要自定义TlbImp的要求,并且提取了一些呼声最高的自定义请求,制作了TlbImp自定义工具,也在codeplex发行。详见http://blogs.msdn.com/silverlightshanghai/archive/2009/03/13/codeplex-tlbimp.aspx

3. 等价类型

前面提到,COM组件要为.NET所用,需要Interop Assembly。不同版本的COM组件,带来了部署上的问题。在CLR 4.0之中,我们通过等价类型的引入,就部署IA的问题,给出了更好的解决方案。

4. 其他

Interop其他方面的改动,包括自定义Stub来处理Interop中的Marshalling和目标函数调用;使用COM取代了原先的远程对象访问;让用户自己决定清理RCW的时机等等,会有更为详细的博文作具体介绍。

4.1.2.    垃圾回收

垃圾回收一直是CLR中的核心模块,对托管程序运行的性能至关重要。在这个版本中,CLR引入了background GC,和原来的Concurrent GC相比,在GC进行的过程中,会更少的阻断其他进程,从而提高整个CLR的运行效率。同时,此前在sp2中引入的GC::RegisterForFullGCNotification可以让 CLR4.0可以通知用户第二代GC发生,从而使服务器有机会处理负载平衡,使得整个服务器端的处理能力不至于因为GC的发生受到太大的影响。

4.1.3.    代码约定

在CLR4.0中,引入了代码约定,更方便用户规范代码的行为,大家可以从System.Diagnostics.Contracts这一命名空间着手,进一步了解其内容。

4.1.4.    Corrupted state exception

CLR 4.0中,对异常处理的哲学有了一个改进:在默认情况下,try/catch语句将不能捕获诸如AccessViolationException等异常。因为这些异常的损毁(Corrupt)了机器的状态(state),即使用户捕获了它们,也无法继续执行代码,或者说,继续执行代码也会变得非常危险。

4.1.5.     新的安全模型

用过CLR v2的安全模型的朋友们可能还会记得诸如Evidence,Policy以及Permission等概念,这些复杂的对象一起构筑了v2的安全模型的框架,CLR4.0中,安全模型被大大简化,SecurityCritical,SecurSafeCritical等一些安全级别构筑了新的安全模型的基础。

4.1.6.     同一个进程,多个CLR

CLR4.0的出现,又添加了一个CLR的版本,尽管我们尽量保证各个不同版本之间的兼容性,但是还是可能出现一些已经开发的组件,需要特定的版本才能运行。为了确保用户过去编写的组件不会因为新的CLR版本而不能运行,CLR4.0中允许用户在一个进程中,运行不同的CLR版本,这样不同的组建就可以各取所需,运行在适合他们的CLR中了。

4.1.7.     基本类库

基本类库,也就是mscorlib.dll,包括了诸如System.Object这样在整个类型系统中最为核心的类库。CLR4.0也包含了很多新功能:比如用于支持动态语言的System.Tuple,新的集合类型System.Collections.Generic.SortedSet,用于提高文件系统浏览性能的API,操作注册表的API,以及对内存映射文件的支持等等。

总的来说,CLR4.0相较于CLR2.0,在保证了很高的兼容性的同时,做了大量的改进工作,在之后的一系列博客中,我们团队的成员会进一步作更为具体的介绍,敬请大家期待。

5. CLR最新发展

6. 参考

CLR 4 新特性 概览 - 蓝讯.htm

CLR 这些年有啥变化吗? - WEB开发者.htm

Atitit. C#.net clr 2.0  4.0新特性的更多相关文章

  1. Atitit.c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结

    Atitit.c# .net 3.5 4.0 各个版本新特性战略规划总结 1. --------------.Net Framework版本同CLR版本的关系1 2. paip.----------- ...

  2. c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结【转载】

    引用:http://blog.csdn.net/attilax/article/details/42014327 c# .net 3.5 4.0 各个版本新特性战略规划总结 1. ---------- ...

  3. 有史来最大改变 Android 5.0十大新特性

    有史来最大改变 Android 5.0十大新特性 2014.10.16 14:51:31 来源:腾讯数码作者:腾讯数码 ( 0 条评论 )   距离Android系统上一次重大更新不到一年的时间,谷歌 ...

  4. C# 6.0可能的新特性及C#发展历程

    据扯,C# 6.0在不远的将来就发布了,对应的IDE可能是VS 2014(.Net Framework 5.0),因为VS 2013已于2013年10月份发布了,对应的是.Net Franework ...

  5. C# 6.0可能的新特性

    C# 6.0可能的新特性 1.主构造函数(Primary Constructors) 主构造函数给类中的变量赋值 Before public class Point { private int x, ...

  6. Spring Boot 2.0正式发布,新特性解读

    作者|翟永超 Spring Boot 2.0 来啦,有哪些新特性?升级吗? 写在前面 北京时间 3 月 1 日,经过漫长的等待之后,Spring Boot 2.0 正式发布.作为 Spring 生态中 ...

  7. C# 6.0可能的新特性及C#发展历程[转]

      C# 6.0可能的新特性及C#发展历程[转] 年10月份发布了,对应的是.Net Franework 4.5.1. 或者3年,更新增加的东西会比较多,所以对于C# 6.0,还是有一些期待的. 下面 ...

  8. MySQL 8.0.2复制新特性(翻译)

    译者:知数堂星耀队 MySQL 8.0.2复制新特性 MySQL 8 正在变得原来越好,而且这也在我们MySQL复制研发团队引起了一阵热潮.我们一直致力于全面提升MySQL复制,通过引入新的和一些有趣 ...

  9. 转载——C# 6.0可能的新特性及C#发展历程

    据扯,C# 6.0在不远的将来就发布了,对应的IDE可能是VS 2014(.Net Framework 5.0),因为VS 2013已于2013年10月份发布了,对应的是.Net Franework ...

  10. 【HANA系列】SAP HANA 1.0 SPS 11 新特性

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA 1.0 SPS ...

随机推荐

  1. 【Android】通过经纬度查询城市信息

    public class GetCity { public static String STATIC_URL = "http://api.map.baidu.com/geocoder/v2/ ...

  2. POJ 1912 A highway and the seven dwarfs (凸包)

    [题目链接] http://poj.org/problem?id=1912 [题目大意] 给出一些点,表示一些屋子,这些屋子共同组成了村庄,现在要建一些高速公路 问是否经过了村庄. [题解] 这些屋子 ...

  3. 【推导】Codeforces Round #402 (Div. 2) A. Pupils Redistribution

    一次交换,会让Group A里面的某个数字的数量-1,另一个数字的数量+1:对Group B恰好相反. 于是答案就是xigma(i=1~5,numA[i]-numB[i]>0)(numA[i]- ...

  4. 什么是EPEL 及 Centos上安装EPEL(转)

    什么是EPEL 及 Centos上安装EPEL 转自:http://www.unxmail.com/read.php?67 RHEL以及他的衍生发行版如CentOS.Scientific Linux为 ...

  5. Exercise03_03

    import java.util.Scanner; public class LinearEquation { public static void main(String[] args){ doub ...

  6. ProgressDialog进度条对话框

    (一) 1.效果图: 2.activity_main.xml <?xml version="1.0" encoding="utf-8"?> < ...

  7. Ubuntu 16.04下Shell脚本中使用数组提示:Syntax error: "(" unexpected

    说明:这种现象在CentOS中不会出现. 分析: 可以看出sh指向了dash 解决方式: 1.不要用sh执行,使用./test.sh执行.或者bash执行. 2.根治,直接修改sh的指向,改成bash ...

  8. Swift,函数

    1.无参数无输出的函数 func a(){ print("HI") } a() //HI 2.有参数有输出的函数 func add(a:Int,b:Int)->Int{ // ...

  9. javascript快速入门5--数组与对象

    数组 数组,实际上就是将一大堆相似的数据有秩序的放在格子箱中,十分像药房里的那些柜子. 数据1 数据2 数据3 数据4 数据5 数据6 用代码创建数组 var arr = new Array();// ...

  10. Python实现局域网内屏幕广播的技术要点分析(转载)

    转载:https://mp.weixin.qq.com/s?timestamp=1498531736&src=3&ver=1&signature=Eq6DPvkuGJi*G5s ...