.NET 4.5對Base Class Library做出改善
Base Class Library 是 .NET 開發平臺的核心。不管你使用了何種配置或者前端技術,都會在應用程序中找到使用 BCL 的地方。以下是期望在 .NET 4.5 中做出改善的地方:
System.IO
對于耗費大量資源的操作,Stream、TextReader 和 TextWriter 類都擁有了新的 async 方法。這里的消耗我們指的是“可能會在一次操作中做大量工作”。而像 TextReader.Peek 之類的方法不會獲得 async 版本的方法。背后的原因在于,坦率地說,async 操作并不會節省資源。它們需要分配 Task 對象,可能還需要做上下文切換,處理緩存可能失效的情況,因此總體上不適合用于嚴格的循環中。Immo Landwerth 接著說到,
一般的指導原則是: 讓你的異步操作盡可能地厚重。例如,如果你想要使用 BinaryReader 從流中讀取 1000 個 Int32 的數據,最好運行并等待一個任務同步地讀取所有 1000 條數據,而不是分別運行并等待 1000 個任務,每個任務都只讀取一條 Int32 數據。
說到 BinaryReader,你現在可以告訴它不要自動關閉它所包裝的流。這個特性對 BinaryWriter、StreamReader 和 StreamWriter 同樣適用。
Immo 還提到,.NET BCL 現在使用了開源程序庫 zlib 來實現 System.IO.Compression 命名空間。這包括對 DeflateStream 性能的修正,以及新的 ZipArchive 類。這并非是 zlib 第一次被微軟使用,它還用于 Windows 的 Zip 文件支持和 WPF 中。
System.Collection
我們已經談到了.NET 4.5 中的只讀集合,到現在為止其中并沒有顯著改變。值得注意的一種被遺漏的特性是 IReadOnlySet,它被用于匹配 HashSet 和 ISet。
抽象類 Comparer 使用了一些函數式編程的優勢。你不能顯式地實現這個類,而是需要調用 Comparer.Create,在一個比較函數中傳遞它,然而讓它來負責其他處理。
很少有人知道 ArraySegment 結構,它也獲得了重大改進,第一次真正實現了讓它變得有用的接口,像 IEnumerable 和 IList。然而,它只對裸數組(naked arrays)有效,大多數開發者更喜歡使用更高級別的集合類,像 List。
雜項
AssemblyMetadataAttribute 現在是對集合賦予任意鍵值對的標準方式。你可能不清楚為什么會使用它,而不是定義自定義的屬性,但是如果你想的話就可以那樣用。
Console 現在讓你知道輸入、輸出或者錯誤流是否被重定向。你可能最多是使用它來禁用依賴于設置鼠標位置或者改變屏幕顏色的特性。如果你需要支持額外的字符,還可以把編碼變更為 Encoding.Unicode。
WeakReference 提供了替換 WeakReference 的類型安全的方法。為了消除長期存在的競爭條件,WeakReference 不再提供單獨的 IsAlive 和 TryGetTarget 方法。取而代之的是,它們被組合到 TryGetTarget 之中。
不幸的是,看起來我們不會有相匹配的 WeakDelegate,如果存在的話,會讓實現弱事件更容易。
Regex 現在支持 Timeout 屬性。這是很重要的工具,當允許用戶注入任意的正則表達式的時候,可以避免拒絕服務攻擊。
查看英文原文:.NET 4.5 Improves to the Base Class Library
來自: InfoQ