天天看點

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

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依賴關系 和新特性添加清單,

3. CLR 2.0

 CLR 在.NET架構中所處的位置

CLR作為.NET架構中的一部分,總是跟着.NET發行,但是近年來.NET的發行版本從2.0一直到3.5, 但是CLR卻還一直保留在2.0,如下表所示:

.NET架構版本 時間 CLR
1.0 2002.2
1.1 2003.4
2.0 (Generics) 2006.1 2.0
3.0 (WPF/WCF/WF) 2006.11
3.5 (LINQ) 2007.11
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最新發展

繼續閱讀