.NET Standard 2.1發布:進一步使.NET實現一致
微軟在11月5日發布了.NET Standard 2.1 ,開發團隊計劃在.NET Standard 2.1 中添加大約3000 個API ,其中很大一部分都是全新的,另外一部分則是添加到標準中的現有API ,以便進一步使.NET 實現一致。
更新亮點:
● Span<T>。在.NET Core 2.1中,團隊添加了一個類似於數組的類型Span<T>,它允許以統一的方式表示託管和非託管內存,並支持切片而無需複制。它是.NET Core 2.1中與性能相關的大多數改進的核心。由於它允許以更有效的方式管理緩衝區,因此可以幫助減少內存分配和復制。Span<T>被認為是一種非常基礎的類型,因為它需要運行時和編譯器支持才能充分利用。
● Foundational-APIs working with spans。雖然Span已經可以作為.NET Standard兼容的NuGet包(System.Memor)使用,但添加此包不能擴展.NET Standard類型的成員去使用span。.NET Core 2.1添加了許多允許使用span的API,如Stream.Read(Span) 。將span帶入.Net Standard的話,添加這些API是很重要的一部分。
● Reflection emit。為了提高生產力,.NET生態系統一直大量使用動態功能,如reflection(反射)和reflection emit 。Emit通常被用作優化性能,以及為代理接口動態生成類型的方法。因此,許多人要求將reflection emit包含在.NET standard中。以前,開發團隊試圖通過NuGet包提供,結果發現無法使用包來模擬這樣的核心技術。使用.NET Standard 2.1 ,你可以訪問輕量級代碼生成(LCG)以及reflection emit ,同時添加了兩個新的API ,允許你檢查生成代碼的能力(RuntimeFeature.IsDynamicCodeSupported)以及生成的代碼是否被解釋或編譯(RuntimeFeature.IsDynamicCodeCompiled)。
● SIMD。.NET Framework和.NET Core支持SIMD已經有一段時間了,多被用於加速BCL中的基本操作,例如字符串比較。開發團隊收到了很多在.NET Standard中公開這些API的請求,因為這些功能需要運行時支持,因此無法作為NuGet包提供。
● ValueTask和ValueTask<T>。在.NET Core 2.1中,最大的亮點是對高性能場景的基礎知識的支持改進,其中還包含提高async/await效率。ValueTask已經存在,並且如果操作同步,則允許返回結果,而無需分配新的Task。在.NET Core 2.1中,開發團隊進一步對其進行改進,使得有一個相應的非泛型ValueTask變得很有用。它允許減少分配內存,即使是在必須異步完成操作的情況下也是如此。在.NET Standard 2.1中公開這些API將使庫作者能夠作為消費者和生產者從中受益。
● DbProviderFactories。在.NET Standard 2.0中,開發團隊在ADO.NET中添加了幾乎所有的基礎類型(Primitives),以允許ORM和實現者進行通信。不幸的是,當時DbProviderFactories未在其中,新版本已將其補上。簡而言之,DbProviderFactories允許庫和應用在編譯時使用特定的ADO.NET提供程序而無需知道任何特定類型,方法是在基於名稱的已註冊DbProviderFactory實例中進行選擇,例如,可以從配置設置中讀取。
● General Goodness。自從.NET Core開源後,基礎類庫中已添加許多小功能,例如System.HashCode用於組合hash code或System.String上的新的重載。.NET Core中大約有800個新成員,且幾乎都加入了.NET Standard 2.1。
更多內容可查閱發行說明:
https://blogs.msdn.microsoft.com/dotnet/2018/11/05/announcing-net-standard-2-1/