天天看點

【翻譯】.NET 5 Preview2釋出

在4月2日,釋出了.NET 5.0 Preview2,這次釋出對一些功能和性能做了相關的改進,同時後面也會實施5.0版本更多的功能,其中一些功能設計目前也在dotnet/designs中顯示,在.NET 5 Preview1中可以看到.NET 5裡程碑中已經完成的建設任務,當然可以檢視相關的設計資料進行回報,同時可以下載下傳Preview2并進行測試他。

可以在Windows MacOS和Linux下載下傳.NET 5 Preview2

  • .NET 5 Preview2 And Runtimes
  • Docker Images
  • Snap Installer

ASP.NET Core和EF Core也在當天釋出。

必須要使用Visual Studio 2019 16.6才可以使用.NET 5.0。安裝最新版本的C# 擴充,将.NET 5.0在VisualStudio Code中使用,目前還不支援Mac的Visual Studio.

發行說明:

  • .NET 5.0 Preview2發行說明
  • .NET 5.0已知問題
  • GitHub中issues

RyuJIT中代碼品質的改進

每個版本都包含着一些更改,這些更改可以改進JIT生成的機器代碼(它被稱為“code quality”).更好的代碼品質意味着更好的性能。總而言之,下面改進中一半的是實際的新優化,另一半是由于更改RyuJIT的流程而使現有優化能夠應用到更多的代碼中.

  • Use xmm for stack prolog – dotnet/runtime #32538 更改為x86/x64 prolog歸零代碼,改進:Json;
  • Add ValueNumbering support for GT_SIMD and GT_HWINTRINSIC tree nodes – dotnet/runtime #31834 —為SIMD和硬體固有類型啟用優化器。
  • Use GT_NULLCHECK for unconsumed indirections – dotnet/runtime #32641—删除備援null檢查。
  • invoke nullable box optimizations earlier – dotnet/runtime #32269—改善優化Nullable。
  • Optimize range checks for various array index patterns – dotnet/runtime #1644-消除 range checks 的改進。
  • Optimize obj.GetType() != typeof(X) for sealed classes – dotnet/runtime #32790-改進了類型檢查表達式。
  • Eliminate duplicate zero initializations more aggressively – dotnet/runtime #31960—更好和更廣泛的方法,以消除重複零初始化。
  • Fix method and basic block flags used by early opts – dotnet/runtime #2196
  • 優化某些可以頻繁使用,現在更經常地用常數替換數組長度。

垃圾收集器

  • Card mark stealing – dotnet/coreclr #25986- 伺服器GC(位于不同線程上)可以在标記由較早一代對象保留的gen0/ 1對象時進行執行擷取。 這意味着,對于某些GC線程要花費更長的時間進行标記的情況,短暫的GC暫停時間較短。
  • Introducing Pinned Object Heap – dotnet/runtime #32283 — 實作了POH(Pinned Object Heap)功能的一部分– GC内部的一部分。 這個新的堆(本質上是LOH的對等體)将允許GC分别管理固定對象,進而避免固定對象對世代堆的負面影響。
  • Allow allocating large object from free list while background sweeping SOH – dotnet/runtime #2103 — 當BGC清理SOH時,使用空閑清單啟用LOH配置設定。以前這隻是在LOH上使用段空間的末端。這樣可以更好地使用堆。
  • Background GC suspension fixes – dotnet/coreclr #27729 -暫停修複程式減少了BGC和使用者線程被暫停的時間。 這樣可以減少發生GC之前挂起托管線程所需的總時間。 dotnet / coreclr#27578也有助于達到相同的結果。
  • Fix named cgroup handling in docker – dotnet/runtime #980 — -

    添加了對從命名cgroup讀取限制的支援。以前,我們僅從全局範圍内閱讀。

Closing

在容器,虛拟機大家可以去嘗試Preview2。希望大家對.NET5提出并回報意見。接下來幾個月裡面,将會有更多的版本釋出。最終将在11月釋出正式版本。

作為測試案例,目前.NET 5.0在Azure負載均衡上運作了.NET網站的50%的流量.

自從釋出預覽版1天以來一直在上面這麼做了,也許大家還記得.NET Core3.0和3.1也這樣做過測試案例.

通過将流量分流為5/5,可以確定在不斷地性能資料情況下5.0将持續的改進變得更好。這種測試是公開的,也是一種很好的測試方法,目前用.NET5在核心網站的生産環境這将是對.NET5最大的信任,當然不建議大家現在進行使用到生産中,建議等等.目前版本号在網站的頁腳中可以看到。

來源:https://devblogs.microsoft.com/dotnet/announcing-net-5-0-preview-2/