C#中Span相关的性能优化建议
目录
- 引言
- 什么是Span
- 关于String的一段性能提升
- 测试代码
- 最终性能对比
- 写在最后
引言
C# 是一门现代化的编程语言,与Java十分的相似。熟练的开发者甚至能三天无缝切换到Java。生态性能也是遍地开花。今天, 让我们来学习一下C#中的Span相关的性能优化吧
什么是Span
System.Span 是在 .NET 中发挥关键作用的新值类型。使用它,可以表示任意内存的相邻区域,无论相应内存是与托管对象相关联,还是通过互操作由本机代码提供,亦或是位于堆栈上。除了具有上述用途外,它仍能确保安全访问和高性能特性,就像数组一样。读过官网的一段描述,可知:Span是一个值类型。他的价值在于可以让我们将任何类型存放于相邻区域。这包括:
- 非托管内存
- 堆栈
- 托管内存
关于String的一段性能提升
![C#中Span相关的性能优化建议](https://img.it610.com/image/info11/966e5fae630e43968a22347721f8c31b.jpg)
文章图片
有些网站呀,做完活动后,通常会公布中奖名单(doge)。现在的需求是,我们要将用户名的中间几个字打码,例如:林深鹿 ,我们要将其写为林*鹿 来保护用户隐私 。
来看一段代码:
![C#中Span相关的性能优化建议](https://img.it610.com/image/info11/215abf8b94b945a39c47ed798736a222.jpg)
文章图片
我们将 “程序媛小庄” 作为参数,拼接了一下字符串,来看下输出结果:
![C#中Span相关的性能优化建议](https://img.it610.com/image/info11/8b425a439bb04ff681974e1362ee813a.png)
文章图片
非常的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个字符,并填充为 *
测试代码
![C#中Span相关的性能优化建议](https://img.it610.com/image/info11/661beb93527f4d87baca6b288da1bd7c.jpg)
文章图片
最终性能对比
![C#中Span相关的性能优化建议](https://img.it610.com/image/info11/3906354078604dcfadacfc7091cc47fd.png)
文章图片
写在最后
上述代码Span无论是在内存占用还是平均时间上都超过了string 原生的API
Span 提供的一系列API,让我们能够在C#上使用本机代码,给我们以更强的性能。
【C#中Span相关的性能优化建议】到此这篇关于C#中Span相关性能优化建议的文章就介绍到这了,更多相关c# Span性能优化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 热闹中的孤独
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- “成长”读书社群招募
- 2020-04-07vue中Axios的封装和API接口的管理