.net core 2.1的重头戏就是性能,其中最重要的两个类就是span和memory,本文这里简单的介绍一下这两个类的使用。

什么是 Span<T>
Span<T> 是新一种新值类型。它表示一段连续的区域,它通常和数组关联,表示数组中的一部分内存。
var arr = new byte[10];
Span<byte> bytes = arr;
也可以取数组中的一部分:
var bytes = new Span<byte>(arr, 3, 5);
初一乍看,span<T>和ArraySegment<T>非常类似,但span更加强大得多,它不但能用于分离数组,还可以引用栈上的数据。
Span<byte> bytes = stackalloc byte[2];
也可以引用指针数据,
Span<byte> bytes;
unsafe { bytes = new Span<byte>((byte*)ptr, 1); }
另外,span还支持 reinterpret_cast 的理念,即可以将 Span<byte> 强制转换为 Span<int>,配合MemoryMarshal类使用,span<T>大多数的时候都可以代替指针了。
除了功能更加强大外,span在bcl库中也得到了更多的支持,大多数支持数组的函数现在基本上都能直接支持span了,如:
var inputSpan = input.AsSpan();
int first = int.Parse(inputSpan.Slice(3, 5));
这个函数中,int.Parse函数就能直接支持span,并且由于不产生子字符串,比使用substring的方法性能更高。
另外,系统也支持数组类型到span的隐式转换,同时提供了AsSpan的显示扩展方法,方便将数组类型转换为span。
除了功能强大外,span的性能也是非常高的,对span的操作基本上和访问数组一样高,无需通过计算来确定指针开头及其起始偏移,因为"引用"字段本身已对两者进行了封装。相比之下,ArraySegment<T> 有单独的偏移字段,这就增加了索引编制和数据传递操作的成本。
什么是 Memory<T>
Span<T>虽然强大而好用,但它只能存在于栈上,而不能存在于堆上,原因主要有如下两点:
- span包含"引用"字段(如数组的开头),这些引用被称为"内部指针"。对于 .NET 运行时的垃圾回收器,跟踪这些指针是一项成本相对高昂的操作。因此,运行时将这些引用约束为仅存在于堆栈上,因为它隐式规定了可以存在的内部指针数量下限。
- 对 Span 执行的读取和写入操作不是原子操作。如果多个线程同时对 Span 在堆上的字段执行读取和写入操作,存在"撕裂"风险。
这个限制决定了无法将 Span 装箱,进而无法将 Span<T> 与现有反射调用 API结合使用,也无法作为泛型参数。
对于大部分同步处理功能,这个并没有太大的影响,但由于span<T>无法存储到堆,从而导致其无法在异步上下文中使用。为了解决这个问题,.net引入了一个新类型Memory<T>。
Memory和span的使用方法大同小异,
var arr = new byte[10];
var bytes = new Memory<byte>(arr, 3, 5);
不同之处在于 Memory<T> 是不类似引用的结构,可以存在于堆上。.net bcl库对memory也做了很好的支持,如Stream.ReadAsync就能直接支持memory<byte>作为参数。
另外,也可以从Memory的Span属性创建指向该Memory的span,这样也可以使用span的强大的功能。
参考文章:
C# - Span 全面介绍:探索 .NET 新增的重要组成部分
到此这篇关于.net中Span<T>类和Memory<T>类的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。
相关推荐:
seo运营经理是什么,seo和运营的区别 ,皖妍ai宁慕晴o
seo该从什么开始,seo是什么时候开始的 ,ai写作免费英文怎么说
SEO站在未来之巅,助力网站在激烈竞争中脱颖而出,推荐网站优化欢迎咨询
《*采集站:带你领略全球最全*资源的宝藏平台》,seo优化易下拉瞧瞧
SEO短视:为何眼前的成效不能成为长久的策略?,网站上线seo优化
目前AI软件有哪些?智能新时代的必备工具
【BVIP尊享体验:超越奢华,开启专属未来】,珠宝网站建设思路
seo需要保持什么心态,seo的要求 ,ai83562
丹东seo是什么怎么选,丹东spr ,黑发ai图
用AI写文章,释放你的创作潜力!
ChatGPT启动时遇到问题?快速解决方案让你畅享智能对话体验,ai如何保存logo
SEO总结:如何通过优化提升网站排名与流量,关键词排名消失
AI免费生成文本,内容创作新篇章
SEO有话:如何用精准优化助力企业在线增长,食品微信营销推广
seo软件是什么职位,seo用的是什么软件 ,ai感知树
目前国内最好的AI人工智能软件:未来新篇章
文章AI指令提升写作效率的智能助手
SEO未来:如何在变革中抢占先机,迎接数字营销的新纪元,台州网站建设分析和总结
二次创作的魅力与潜力:创意无限的数字时代,天长外贸网站建设
用AI写一篇文章,如何提升你的写作效率与创意
ChatGPT遇到问题?如何解决“您的应用遇到问题,无法正常启动”困境?,ai下载增强版
ChatGPT在处理文本时可能无法完全理解上下文的复杂性,肌肉ai
SEO兼职:如何通过SEO兼职实现收入增长与职业突破,濮阳网站建设官网
AI缩写文本:助力智能生活的革新力量,ai智能写作生成神器下载
seo进阶买什么书运营,seo入门难吗 ,没有ai软件怎么打开ai图片
好用的AI智能工具,让生活与工作更高效!
seo适用于什么领域,seo适用于什么领域中 ,ai智能翻译写作机器人v1.0
ChatGPT页面不自动显示最新消息:如何解决这一困扰,提升使用体验?,斑马ai幼儿百度云网盘
SEO抢权:如何在竞争激烈的市场中占得先机,正规网站建设口碑好
AI网页生成:轻松构建智能网站,提升品牌竞争力,杭州专业ai智能教育
seo需要买什么,seo需要考虑什么 ,ai做表头
怎么用AI生成文章?全新写作方式的揭秘与应用指南
怎么用AI写文章:高效创作的秘诀
ChatGPT崩一次多久修复?揭秘背后的技术与保障,ai1818818
seo需要学会什么编程,seo要会些什么 ,剪映怎样加ai
企业如何借助SEO咨询实现精准流量引爆,助力业绩提升,立刻推广的旅游线下营销
SEO添加:提升网站流量与排名的必备策略,seo团队成员中国人
seo都有什么意思,seo 啥意思 ,ai园林
seo规范是什么,seo行业标准 ,啊龙ai音乐
SEO站外优化策略:提升网站排名的关键因素,遵义公司网站推广
ChatGPT您的应用遇到问题,无法正常启动?如何解决并重新体验智能助手的魅力!,男头ai关键词
seo跟sem是什么,seo和sem的概念 ,惠威的ai功能
“更加通顺”-让生活与工作无缝衔接的语言魅力,SEO书架书桌收纳
AI一键生成文章免费版:颠覆写作新体验
ChatGPT桌面版无法加载?快速解决方案及常见问题解析,ai媚眼
SEO能够助力网站流量增长,提升品牌竞争力,Seo网站排名原理
主流seo是什么,seo是什么推广网站 ,AI心理师
SEO运维:提升网站排名的核心战略,邢台网站建设优化建站
ChatGPT不登录,如何畅享AI的智能服务?,手信ai
ChatGPT宕机两小时,OpenAI紧急修复,用户期待AI恢复正常服务,oppo小布ai