C#中Span相關(guān)的性能優(yōu)化建議
引言
C# 是一門現(xiàn)代化的編程語言,與Java十分的相似。熟練的開發(fā)者甚至能三天無縫切換到Java。生態(tài)性能也是遍地開花。今天, 讓我們來學(xué)習(xí)一下C#中的Span相關(guān)的性能優(yōu)化吧
什么是Span
System.Span 是在 .NET 中發(fā)揮關(guān)鍵作用的新值類型。使用它,可以表示任意內(nèi)存的相鄰區(qū)域,無論相應(yīng)內(nèi)存是與托管對(duì)象相關(guān)聯(lián),還是通過互操作由本機(jī)代碼提供,亦或是位于堆棧上。除了具有上述用途外,它仍能確保安全訪問和高性能特性,就像數(shù)組一樣。
讀過官網(wǎng)的一段描述,可知:Span是一個(gè)值類型。他的價(jià)值在于可以讓我們將任何類型存放于相鄰區(qū)域。這包括:
- 非托管內(nèi)存
- 堆棧
- 托管內(nèi)存
關(guān)于String的一段性能提升
有些網(wǎng)站呀,做完活動(dòng)后,通常會(huì)公布中獎(jiǎng)名單(doge)?,F(xiàn)在的需求是,我們要將用戶名的中間幾個(gè)字打碼,例如:林深鹿 ,我們要將其寫為林*鹿 來保護(hù)用戶隱私 。
來看一段代碼:
我們將 “程序媛小莊” 作為參數(shù),拼接了一下字符串,來看下輸出結(jié)果:
非常的nice,非常的easy
接下來,我們來使用Span實(shí)現(xiàn):
static void Main(string[] args) { Console.WriteLine(ObfuscatePhoneSpan("程序媛小莊")); } static string ObfuscatePhoneSpan(string id) { return string.Create(id.Length, id, (sc, value) => { int n = id.Length / 2; int r = id.Length - (id.Length * 20 / 100) - n; //需替換的個(gè)數(shù) = (總長(zhǎng)) - (20%) - (一半) value.AsSpan().CopyTo(sc); sc.Slice(n, r).Fill('*'); }); }
value 變量是個(gè)字符串,它提供了AsSpan方法,讓我們得到了Span的實(shí)例,最終通過Slice方法從n截取r個(gè)字符,并填充為 *
測(cè)試代碼
最終性能對(duì)比
寫在最后
上述代碼Span無論是在內(nèi)存占用還是平均時(shí)間上都超過了string 原生的API
Span 提供的一系列API,讓我們能夠在C#上使用本機(jī)代碼,給我們以更強(qiáng)的性能。
到此這篇關(guān)于C#中Span相關(guān)性能優(yōu)化建議的文章就介紹到這了,更多相關(guān)c# Span性能優(yōu)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談C#中HttpWebRequest與HttpWebResponse的使用方法
本篇文章主要介紹了淺談C#中HttpWebRequest與HttpWebResponse的使用方法,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01C#中將dateTimePicker初始值設(shè)置為空
本文主要介紹了C#中將dateTimePicker初始值設(shè)置為空,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02用C#+Selenium+ChromeDriver爬取網(wǎng)頁(模擬真實(shí)的用戶瀏覽行為)
這篇文章主要介紹了用C#+Selenium+ChromeDriver爬取網(wǎng)頁,模擬真實(shí)的用戶瀏覽行為,需要的小伙伴可以參考一下2022-01-01C# 數(shù)組刪除元素的實(shí)現(xiàn)示例
本文主要介紹了C# 數(shù)組刪除元素的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08使用 BenchmarkDotNet 對(duì) C# 代碼進(jìn)行基準(zhǔn)測(cè)試
這篇文章主要介紹了使用 BenchmarkDotNet 對(duì) C# 代碼進(jìn)行基準(zhǔn)測(cè)試,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-03-03RegexOptions.IgnoreCase正則表達(dá)式替換,忽略大小寫
RegexOptions.IgnoreCase正則表達(dá)式替換,忽略大小寫,需要的朋友可以參考一下2013-03-03