.NET 4.5 基類庫中的新增功能


 

1. 簡化的異步編程

C#和VB都支持了新的async & await語法以簡化異步編程,.Net Framework中也相應增加了相關的函數以輔助。一個比較醒目的變化就是在IO操作中多了許多XXXAsync的函數,另外,線程操作的Task類中也新增了不少靜態函數。

 

2. 只讀集合接口

長期以來,BCL中提供的只讀集合只有IEnumerable<T>它主要存在如下問題:

  • 每次訪問都需要迭代,如果多次訪問則導致性能較差。
  • 不支持統計元素個數
  • 不支持隨機訪問或查詢訪問

由於C#不像C++那樣能返回const只讀對象,如果直接返回List或Dictionary引用的話又有集合被調用方修改的風險,有的時候,為了防止集合被修改,我們甚至通過ToArray這種比較低效的方法返回一個副本。

.Net 4.5中增加了IReadOnlyList<T>IReadOnlyDictionary<TKey, TValue>兩個只讀集合接口(它們有公共的父接口IReadOnlyCollection),它們是支持協變的,這樣我們返回集合的時候就可以直接返回只讀集合了。

 

3. zip存檔支持

.Net 4.5中增加了ZipArchive類實現對Zip文件的管理,由於考慮到了Metro程序不支持文件系統,它的功能被拆分到了兩個Dll。

  • System.IO.Compression.dll 此程序集包含通用 .zip 功能, 它不支持文件路徑。 此程序集中的主類是 ZipArchive。
  • System.IO.Compression.FileSystem.dl 此程序集提供 ZipFile 靜態類以定義擴展方法和靜態幫助程序。

PS:個人感覺這個設計比較蛋疼,用個Zip還需要引用兩個Dll,完全可以合並成一個或全部塞到mscrolib里面去,對於Metro程序直接把不支持的給裁剪了即可。另外,這個庫不支持帶密碼的zip文件,不知道設計者是怎么想的。

 

4. HttpClient

.Net 4.5中新增了一個HttpClient類專門用於Http操作,十分小巧好用,我以前寫過一篇文章介紹他-- .Net 4.5中的HttpClient試用,這里就不多說了。

 

5. WebSocket

.Net 4.5中,在System.Web.WebSockets和System.Net.WebSocket名字空間實現了對WebSocket的支持,其中前者主要用於Asp.net框架。通過它可以快速建立自己的webSocket服務,我在文章HTML5中的WebSocket中也介紹過。不過它不支持win7,只能在win8上工作,這個限制使得它的工作范圍變得有限了不少。

 

6. WeakReference<T>

新提供的泛型WeakReference<T>解決了以前的WeakReference存在的兩個問題:1. 需要類型轉換,2. 不可靠的IsAlive屬性(WeakReference<T>就把它給直接去掉了)。有了WeakReference<T>后,老版本的WeakReference該下崗了。

 

7. ArraySegment<T>

這個類本身在.Net 2.0中就已經有了,主要用於提供一個數組的子集,而無需復制副本。但它之前沒有什么接口方法,導致只能遍歷,限制太大。現在實現了IList接口,用起來方便多了。

 

8. Comparer<T>.Create

到了.Net 4.5,我們終於可以通過一個lambda表達式構造一個IComparer<T>對象了,一直以為這個應該是在.Net 2.0時代就應該提供的功能。

 

9. SemaphoreSlim.WaitAsync

這個是系統內置的唯一一個異步鎖,如果覺得不夠用,請參看我以前的文章--基於TPL異步編程的同步和互斥的類庫

 

10. StreamReader、StreamWriter等不釋放基礎流的選項

BinaryReader、BinaryWriter、StreamReader、StreamWriter等流讀寫類的構造函數中增加了leaveOpen參數,以控制它們放棄對基礎流的托管。也就是說,在StreamReader關閉的時候,可以選擇不關閉其基礎流。

 

11. Regex.Timeout

正則表達式終於支持超時了,雖然用到的地方感覺不是很多,但還是比較有用的。

 

12. CancellationTokenSource支持超時自動取消

不多介紹了,請參考我以前的文章-- .Net 4.5中通過CancellationTokenSource實現對超時任務的取消

 

其他兩個非BCL中的類庫

1. TPL Dataflow (TDF)

TPL Dataflow是微軟面向高並發應用而推出的新程序庫,很好很強大,不知道為什么微軟沒有把它合並到BCL中,而是單獨做一個庫發行,可以通過NUGET或在TDF的官網下載。這個庫接口不多,但非常好用,有空的話我專門寫幾篇文章來描述一下他,不過目前對它的資料不是很多,有的細節還是了解的不清楚。

 

2. Roslyn

編譯器即服務(Compiler as a Service)是C# 5.0的核心功能之一,我以前在文章通過Roslyn構建自己的C#腳本介紹過它的部分功能。不過Roslyn的開發進度好像趕不上VisualStudio的發布,目前還是CTP版本(Anders大牛忙着搞TypeScript去了? O(∩_∩)O~),不過實現的功能已經比較全了,想嘗鮮的朋友可以在微軟的網站或NUGET上下載。

 

參考文章:http://msdn.microsoft.com/zh-cn/magazine/jj133817.aspx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM