溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

.NET Core運行時和基礎類庫性能怎么提升的

發(fā)布時間:2022-01-05 15:05:11 來源:億速云 閱讀:117 作者:柒染 欄目:大數(shù)據(jù)

這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān).NET Core運行時和基礎類庫性能怎么提升的,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

微軟宣布改進了.NET Core運行時和基礎類庫的性能。雖然沒有像改進ASP.NET Core的性能那樣大肆宣傳,但這些改進同樣重要。

其中,以下10個方面的變化比較顯著:集合、LINQ、壓縮、加密、數(shù)學運算、序列化、文本處理、文件I/O、網(wǎng)絡和并發(fā)。至于任何一組性能變化如何影響具體的應用程序則取決于具體的使用模式。下面的討論只列出了一些要點,讓你對這些改進有一個大概的了解。其中有許多變化是基于開源Pull Request請求。這樣,一些對于微軟而言因為總體影響極小而不值得實現(xiàn)的重要修改就可以實現(xiàn)了。而這些修改對于很大一部分開發(fā)人員而言相當重要。

集合幾乎在任何應用程序中都有廣泛的應用。許多操作都通過簡化集合或降低復雜度得到了改進。其中有些改進得益于減少開銷,如簡化操作實現(xiàn)更好的內(nèi)聯(lián),或者減少指令數(shù)量。SortedSet的構(gòu)造函數(shù)得到了修復,因為最初該構(gòu)造函數(shù)采用了一種簡單的方式編寫,在處理重復時可擴展性不是很好。SortedSet的Min和 Max不需要遍歷整棵樹。List.Add的速度更快了。不只是System.Collections.Generic得到了改進,其他命名空間如System.Collections.Concurrent也得到了改進。 ConcurrentQueue和ConcurrentBag基本上重寫了。LINQ用戶應用僅從集合的改進就可以感受到性能的提升了。

此外,LINQ本身的性能也是一個改進方面。為了減少內(nèi)存分配的數(shù)量和大小以及簡化算法,.NET Core的許多操作符都重寫了。例如,Enumerable.Concat可以確保串聯(lián)多個Enumerable時線性增長,而不是指數(shù)增長。ToList和Select操作符經(jīng)過了簡化,減少了內(nèi)存分配和委托及接口的使用,同時將字段讀寫最小化,避免了復制。Enumerable.ToArray現(xiàn)在對內(nèi)部緩沖區(qū)的管理也更好了。

與集合和LINQ操作內(nèi)存不同,壓縮通常是受CPU限制。例如,DeflateStream現(xiàn)在使用了一個原生解壓庫。該原生解壓庫也經(jīng)過了優(yōu)化。

在加密方面,SHA256.Create使用了一種原生實現(xiàn),如Windows上的CNG,或Unix上的OpenSSL。

數(shù)學運算操作在操作BigInteger時的性能得到了提升。

二進制序列化是CPU、數(shù)據(jù)和內(nèi)存密集型的。.NET Core 2.0增加了BinaryFormatter,并允許O(N)算法在切換到O(N2)算法之前使用更長的時間?,F(xiàn)在,較大的序列化輸入可以更快地處理了。

對于文本處理,Regex.IsMatch在內(nèi)存分配方面更高效了,而且,由于數(shù)據(jù)緩存方式的變化,垃圾收集也更高效了。WebUtility.UrlDecode不再對輸入做實際上并不需要的解碼了。微軟針對一些內(nèi)置的Encoding派生類型進行了循環(huán)優(yōu)化。

微軟對字符串操作也做了許多改進。Enum.Parse在內(nèi)存使用方面更高效了,所以垃圾收集也更高效了。各種ToString方法也經(jīng)過了改進。String類本身的方法也經(jīng)過了改進,如IndexOf和StartsWith??紤]到字符串在應用程序中使用比較多,這樣的改進應該會產(chǎn)生巨大的影響。

文件I/O經(jīng)過了改進。使用異步讀寫的FileStreams現(xiàn)在效率更高了。

底層網(wǎng)絡協(xié)議棧經(jīng)過了改進。異步套接字現(xiàn)在允許此類操作實際上同步完成,從而避免異步完成的開銷。這些類型的變化對于使用套接字原語的上層函數(shù)有很大的影響。與上層網(wǎng)絡類如NetworkStream和 SslStream相關(guān)的工作也是一個改進的來源。

對并發(fā)與并行的修改工作已經(jīng)開展。許多.NET應用程序使用ThreadPool類。例如,QueueUserWorkItem使用一個同步控制和內(nèi)存分配更少的隊列取代了全局隊列,大大減少了垃圾收集工作。對于類似SpinLock這樣的同步原語,相關(guān)的改進工作一直在進行。SpinLock.TryEnter經(jīng)過了改進,當無法立即獲得鎖時,它會更快地失敗。對于使用這個類的熱門執(zhí)行路徑,這項改進帶來了巨大的性能提升。

在這一輪的性能改進工作中,有大約1000個Pull Request被合并進來,而需要完成的工作還有許多??傊?,在增加基于性能的API及改進現(xiàn)有庫方面,性能提升有更高的優(yōu)先級。

BenchmarkDotNet對這些修改做了一些獨立的測試。

上述就是小編為大家分享的.NET Core運行時和基礎類庫性能怎么提升的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI