C#中Span相关的性能优化建议

 更新时间:2021年08月04日 10:02:59   作者:饭熟了  
Span 是C#7.2引入的一种新类型,在.NET Core 2.1运行时中受支持,Span 提供对内存连续区域的类型安全访问,这篇文章主要给大家介绍了关于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性能优化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#控制台实现飞行棋游戏

    C#控制台实现飞行棋游戏

    这篇文章主要为大家详细介绍了C#控制台实现飞行棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • 详解C#使用AD(Active Directory)验证内网用户名密码

    详解C#使用AD(Active Directory)验证内网用户名密码

    这篇文章主要介绍了详解C#使用AD(Active Directory)验证内网用户名密码的相关资料,希望通过本文能帮助到大家,让大家实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • 详解C#实例化对象的三种方式及性能对比

    详解C#实例化对象的三种方式及性能对比

    这篇文章主要介绍了C#实例化对象的三种方式及性能对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • C#知识整理

    C#知识整理

    本文主要介绍了C#的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • C#中OpenCVSharp实现轮廓检测

    C#中OpenCVSharp实现轮廓检测

    这篇文章主要介绍了C#中OpenCVSharp实现轮廓检测,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • ASP.NET总结C#中7种获取当前路径的方法

    ASP.NET总结C#中7种获取当前路径的方法

    本文主要介绍了7种获取当前路径的方法,并做了代码演示,分享给大家,感兴趣的朋友可以参考一下。
    2016-03-03
  • C#表达式树Expression动态创建表达式

    C#表达式树Expression动态创建表达式

    这篇文章介绍了C#表达式树Expression动态创建表达式的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • C#结合JS实现HtmlTable动态添加行并保存到数据库的流程步骤

    C#结合JS实现HtmlTable动态添加行并保存到数据库的流程步骤

    在 Web 应用项目中,实现一对多录入的数据管理功能是一项常见的应用,因此可以实现一个相对轻量化的设计实现表格的录入,为保证功能的可用性、界面友好性,本文给大家介绍了C#结合JS实现HtmlTable动态添加行并保存到数据库,需要的朋友可以参考下
    2024-12-12
  • C#中datatable去重的方法

    C#中datatable去重的方法

    这篇文章主要介绍了C#中datatable去重的方法,通过两种不同的方法对比分析了datatable去重的技巧,非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • C# 微信支付 wx.chooseWXPay 签名错误的解决方法

    C# 微信支付 wx.chooseWXPay 签名错误的解决方法

    本篇文章主要介绍了C# 微信支付 wx.chooseWXPay 签名错误的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12

最新评论