欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中Span相關(guān)的性能優(yōu)化建議

 更新時間:2021年08月04日 10:02:59   作者:飯熟了  
Span 是C#7.2引入的一種新類型,在.NET Core 2.1運行時中受支持,Span 提供對內(nèi)存連續(xù)區(qū)域的類型安全訪問,這篇文章主要給大家介紹了關(guān)于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)存是與托管對象相關(guān)聯(lián),還是通過互操作由本機代碼提供,亦或是位于堆棧上。除了具有上述用途外,它仍能確保安全訪問和高性能特性,就像數(shù)組一樣。

讀過官網(wǎng)的一段描述,可知:Span是一個值類型。他的價值在于可以讓我們將任何類型存放于相鄰區(qū)域。這包括:

  • 非托管內(nèi)存
  • 堆棧
  • 托管內(nèi)存

關(guān)于String的一段性能提升

有些網(wǎng)站呀,做完活動后,通常會公布中獎名單(doge)。現(xiàn)在的需求是,我們要將用戶名的中間幾個字打碼,例如:林深鹿 ,我們要將其寫為林*鹿 來保護用戶隱私 。

來看一段代碼:

我們將 “程序媛小莊” 作為參數(shù),拼接了一下字符串,來看下輸出結(jié)果:

非常的nice,非常的easy

接下來,我們來使用Span實現(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; //需替換的個數(shù) = (總長) - (20%) - (一半)

        value.AsSpan().CopyTo(sc);
        sc.Slice(n, r).Fill('*');
    });
}

value 變量是個字符串,它提供了AsSpan方法,讓我們得到了Span的實例,最終通過Slice方法從n截取r個字符,并填充為 *

測試代碼

最終性能對比

寫在最后

上述代碼Span無論是在內(nèi)存占用還是平均時間上都超過了string 原生的API

Span 提供的一系列API,讓我們能夠在C#上使用本機代碼,給我們以更強的性能。

到此這篇關(guān)于C#中Span相關(guān)性能優(yōu)化建議的文章就介紹到這了,更多相關(guān)c# Span性能優(yōu)化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論