C#中Span相關的性能優化建議
引言
C# 是一門現代化的編程語言,與Java十分的相似。熟練的開發者甚至能三天無縫切換到Java。生態性能也是遍地開花。今天, 讓我們來學習一下C#中的Span相關的性能優化吧
什麼是Span
System.Span 是在 .NET 中發揮關鍵作用的新值類型。使用它,可以表示任意內存的相鄰區域,無論相應內存是與托管對象相關聯,還是通過互操作由本機代碼提供,亦或是位於堆棧上。除瞭具有上述用途外,它仍能確保安全訪問和高性能特性,就像數組一樣。
讀過官網的一段描述,可知:Span是一個值類型。他的價值在於可以讓我們將任何類型存放於相鄰區域。這包括:
- 非托管內存
- 堆棧
- 托管內存
關於String的一段性能提升
有些網站呀,做完活動後,通常會公佈中獎名單(doge)。現在的需求是,我們要將用戶名的中間幾個字打碼,例如:林深鹿 ,我們要將其寫為林*鹿 來保護用戶隱私 。
來看一段代碼:
我們將 “程序媛小莊” 作為參數,拼接瞭一下字符串,來看下輸出結果:
非常的nice,非常的easy
接下來,我們來使用Span實現:
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; //需替換的個數 = (總長) - (20%) - (一半) value.AsSpan().CopyTo(sc); sc.Slice(n, r).Fill('*'); }); }
value 變量是個字符串,它提供瞭AsSpan方法,讓我們得到瞭Span的實例,最終通過Slice方法從n截取r個字符,並填充為 *
測試代碼
最終性能對比
寫在最後
上述代碼Span無論是在內存占用還是平均時間上都超過瞭string 原生的API
Span 提供的一系列API,讓我們能夠在C#上使用本機代碼,給我們以更強的性能。
到此這篇關於C#中Span相關性能優化建議的文章就介紹到這瞭,更多相關c# Span性能優化內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 在 C# 中使用 Span<T> 和 Memory<T> 編寫高性能代碼的詳細步驟
- C#中的var關鍵字用法介紹
- 解決java main函數中的args數組傳值問題
- C#中多維數組[,]和交錯數組[][]的區別
- Java基礎語法之二維數組詳解