2021年,推荐你使用.NET 5的7大原因
在.NET Core的早期版本中,每個版本都發(fā)布了重要的性能改進(jìn),從.NET Core 2.0到.NET Core 2.1到.NET Core 3.0的每一次版本升級,都有著大量的性能優(yōu)化和提升,而隨著大一統(tǒng)的.NET 5的發(fā)布,我發(fā)現(xiàn).NET 5實現(xiàn)了更多的性能改進(jìn),鑒于微軟的努力,使得.NET生態(tài)在國內(nèi)也得到了長足的發(fā)展,而現(xiàn)在的你們,有否計劃轉(zhuǎn)入.NET5的懷抱?下面是我的感受,再給你燒把火,盡快投入.NET 5的懷抱來吧。
webmote
使用它,因為它速度很快
在去年7月份Beta階段,微軟大佬史提芬已經(jīng)闡述了非常多的性能改進(jìn)功能點,請進(jìn)傳送門:[https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-5/]。是的,.NET5為提高性能付出了很多努力,剛讀完這篇文章的時候,我已經(jīng)嘗試了.NET 5的Beta版本,并測試了部分性能,因為對于工程師而言,性能提高的消息總是令人振奮,當(dāng)然我總結(jié)了部分特色,希望你也能很快嘗試它。
使用原因1:橫掃六國,天下凝一
天下大勢,分久必合,合久必分。
多年前的微軟有著五花八門的框架:.net FrameWork、.net core、mono 等等,而微軟的.NET5,其主要目標(biāo)之一是提供一個單一的、跨平臺的.NET 運(yùn)行時和具有統(tǒng)一運(yùn)行時行為和開發(fā)者體驗的框架。在第一次宣布這個項目時,.NET 團(tuán)隊的程序經(jīng)理 Richard Lander 強(qiáng)調(diào)了這個項目的重要性:
**未來只會有一個.NET**,可以支持 Windows、Linux、macOS、iOS、Android、tvOS、watchOS 和 WebAssembly,等等。我們將引入新的.NET API、運(yùn)行時功能和語言特性作為.NET 5 的一部分。此外,我們想清楚地告訴大家,**.NET 5 是.NET 平臺的未來**。
使用原因2:GC優(yōu)化
- 減少 第0代(gen0)和第1代(gen1)回收次數(shù),通過GC標(biāo)記可到達(dá)對象的過程的信息可以轉(zhuǎn)移到其他線程,并且可以部分省略每個線程中同一過程的工作量。優(yōu)化了GC Gen0,1將內(nèi)存返回給OS的過程。
- 通過更改GC的統(tǒng)計方法,成功減少了由于GC的掃描沖突引起的鎖定。這提高了多核期間的可擴(kuò)展性
- 通過支持Intel AVX512(與矢量化排序一起引入)來加快GC中的排序
- 通過在后臺GC進(jìn)行減少前臺GC的掛起來減少鎖定時間。
盡管我試圖對其進(jìn)行總結(jié),但即使通過查看源代碼和說明,也有很多事情我無法理解,有興趣你可以看看其他大佬分享的GC相關(guān)的優(yōu)化。
使用原因3:從coreclr(C / C ++)到corelib(C#)的端口已升級。
在優(yōu)化GC的同時,將C / C ++本地實現(xiàn)的coreclr移植到C#實現(xiàn)的corelib的工作也得到了推進(jìn)。
C#本質(zhì)上是安全的,因此,本機(jī)實現(xiàn)越少,它的安全性就越高。
但是好處不止于此。在coreclr中的本機(jī)代碼運(yùn)行時,甚至GC也將等待它完成。換句話說,使用更少的本機(jī)實現(xiàn)和更多的C#實現(xiàn),GC本身就不太可能等待。
結(jié)果,GC.Collect()大大減少了延遲時間。
使用原因4:Span<T>.Sort取代了Array.Sort
排序是一個非常繁重的過程,并且我們無法避免。由于引入Span<T>.Sort,情況變得非常好了,請看[https://docs.microsoft.com/zh-cn/dotnet/api/system.memoryextensions.sort?view=net-5.0](https://docs.microsoft.com/zh-cn/dotnet/api/system.memoryextensions.sort?view=net-5.0)
上述corelib的好處使排序本身更快。通常在C#中對數(shù)組進(jìn)行排序,但是在Span中執(zhí)行此操作可以節(jié)省很多處理,例如數(shù)組邊界檢查。
它也可以在Array.Sort內(nèi)部運(yùn)行,Span<T>.Sort其優(yōu)點是.NET Framework 4.8的兩倍,并且對.NET Core 3.1也提升了百分之30左右。
使用原因5:編譯器和JIT對Span<T>進(jìn)行了極大的優(yōu)化
.NET Core 3.1進(jìn)行了很多優(yōu)化,在.NET 5中進(jìn)一步增強(qiáng)了這些優(yōu)化功能。
?特別是對 ReadOnlySpan<T>,現(xiàn)在其局部方法固定地保存在靜態(tài)區(qū)域中,而不是堆棧中,還有不需要Span<T>初始化的場景,進(jìn)行0占用優(yōu)化,等等
?
相關(guān)這些的類型太多了。我唯一能說的是減少了代碼大小,減少了處理時間,這是一件好事。
使用原因6:類型處理更快
C#強(qiáng)制轉(zhuǎn)換功能由Cast Helper類在內(nèi)部緩存。由于此實現(xiàn)方式的改進(jìn),ref相關(guān)的使用速度已得到顯著提高。
除了強(qiáng)制轉(zhuǎn)換之外,泛型方法也變得更加通用,并且調(diào)用泛型方法的成本也降低了。
使用原因7:改進(jìn)庫性能
- 字符串處理
- 正則表達(dá)式
- 異步/等待
- Json序列化
- LINQ
- EF core
- 集合
- 網(wǎng)絡(luò)操作
- 正則表達(dá)式
- Blazor
關(guān)鍵是,**無需重寫現(xiàn)有代碼**,所有這些都會受益。
.NET 5很棒。僅其中一項性能改進(jìn)就可以激發(fā)您轉(zhuǎn)向.NET 5。
感恩
開頭鏈接的博客內(nèi)容確實很棒。感謝史提芬。
我們還要感謝每天為.NET和C#的進(jìn)步和提速做出貢獻(xiàn)的所有工程師。
下一步
我正在計劃遷移公司使用的框架到.NET 5上,并且完成異步操作的改造。
希望在今后,有更多遷移相關(guān)的文章和大家分享。
總結(jié)
以上是生活随笔為你收集整理的2021年,推荐你使用.NET 5的7大原因的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NET问答: 枚举 和 常量 在使用时该
- 下一篇: WPF实现时间轴(仿Gitee)