编写高性能C#代码 —— Span<T>

这篇具有很好参考价值的文章主要介绍了编写高性能C#代码 —— Span<T>。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Span 提供任意内存的连续区域的类型安全和内存安全表示形式。它是在堆栈而不是托管堆上分配的ref结构,是对任意内存块的抽象 。

1.关于Span

  • 在NET Core 2.1中首次引入

  • 提供对任意内存上的连续区域的读写视图

  • 利用索引/迭代来修改范围内的内存
  • 几乎无开销

2.和内存的关系

   Span 表示任意内存的连续区域。 Span<T>实例通常用于保存数组的元素或数组的一部分。 但是,与数组不同, Span<T>实例可以指向堆栈上托管的内存、本机内存或托管的内存。

3.性能测试

  Span通常用来处理数组,所以本次测试的场景是数组的切分:从一个数组的中间元素开始,获取并返回四分之一个元素。

  3.1 数组初始化

  这里我们准备一个数组分三种不同长度进行初始化,有利于覆盖到更多的测试情况。

编写高性能C#代码 —— Span<T>

 

  3.2 测试采用三种方式,用BenchmarkDotNet比较一下

  第一种(常规):

编写高性能C#代码 —— Span<T>

   第二种(复制):

编写高性能C#代码 —— Span<T>

   第三种(Span切片):

编写高性能C#代码 —— Span<T>

   性能测试结果如下,可以看到Span的速度是很快的,且不占内存。

编写高性能C#代码 —— Span<T>

 

 4. 切片

  Span<T>.Slice()方法就是对内存进行切片,第三种方法区别于前两种,本质上不创建和销毁对象,可以认为是做到了内存0分配

5. ReadOnlySpan

  ReadOnlySpan是Span的只读表示形式,通常用在string的切片(因为string的不可变性)

编写高性能C#代码 —— Span<T>

 

 6. Span<T>局限性

  1. Span是仅限存活在堆栈上的值类型

  2. Span不能是非堆栈类型的字段

  3. Span不能被装箱

  4. Span不能是异步方法的参数或局部变量

  5. Span不能被lambda表达式捕获文章来源地址https://www.toymoban.com/news/detail-745941.html

到了这里,关于编写高性能C#代码 —— Span<T>的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c++代码实现一个高性能内存池(超详细版本)

    写在前面 本文的内存池代码是改编自Nginx的内存池源码,思路几乎一样。由于Nginx源码的变量命名我不喜欢,又没有注释,看得我很难受。想自己写一版容易理解的代码。这应该是全网独一份的超详细版本了(笑~). 应用场景 写内存池的原理之前,按照惯例先说内存池的应用

    2024年02月06日
    浏览(41)
  • Linux C++性能优化秘籍:从编译器到代码,探究高性能C++程序的实现之道

    随着大数据、人工智能等技术的飞速发展,程序性能优化的重要性愈发突出。优化性能可以降低资源消耗、提高系统响应速度,从而在有限的硬件资源下,实现更高的吞吐量和处理能力。此外,性能优化也有助于降低能耗、减少散热问题,延长硬件使用寿命。 Linux操作系统具

    2023年04月09日
    浏览(36)
  • 【Unity3D热更新】Unity3D 零成本、高性能的C#的热更新框架:HybridCLR

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 相信只要做过热更新的小伙伴,都被热更新搞过心态吧。 我有一个小伙伴,本来是面向

    2024年01月16日
    浏览(40)
  • 高性能小模型SLM最新优化方案和热门应用盘点,附配套模型和开源代码

    当大多数人都还在卷谁的大模型参数规模大的时候,聪明人已经开始搞“小模型”了(doge)。 这里的小模型指的小型语言模型(Small Language Model,简称SLM),通常用于解决资源受限或实时性要求较高的场景,比如一些边缘设备(智能手机、物联网设备和嵌入式系统等),大模

    2024年01月16日
    浏览(34)
  • 《高性能MySQL》——创建高性能的索引(笔记)

    索引(在MySQL中也叫做“键(key)”) 是存储引擎用于快速找到记录的一种数据结构。 索引对于良好的性能非常关键。尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要。 在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但当数据量逐渐增大时

    2024年02月07日
    浏览(93)
  • 【Linux高性能服务器编程】——高性能服务器框架

      hello !大家好呀! 欢迎大家来到我的Linux高性能服务器编程系列之高性能服务器框架介绍,在这篇文章中, 你将会学习到高效的创建自己的高性能服务器,并且我会给出源码进行剖析,以及手绘UML图来帮助大家来理解,希望能让大家更能了解网络编程技术!!! 希望这篇

    2024年04月25日
    浏览(39)
  • 读高性能MySQL(第4版)笔记08_创建高性能索引(上)

    2.4.2.1. 按照索引列中的数据大小顺序存储的 2.4.3.1. 键前缀查找只适用于根据最左前缀的查找 2.4.4.1. 在查询某些条件的数据时,存储引擎不再需要进行全表扫描 2.4.4.2. 通过比较节点页的值和要查找的值可以找到合适的指针进入下层子节点,这些指针实际上定义了子节点页中

    2024年02月08日
    浏览(32)
  • 读高性能MySQL(第4版)笔记09_创建高性能索引(下)

    1.4.4.1. InnoDB的二级索引在叶子节点中保存了记录的主键值,所以如果二级索引能够覆盖查询,则可以避免对主键索引的二次查询 7.1.5.1. 常见的类似错误通常是由于尝试使用rsync备份InnoDB导致的 7.3.3.1. 否则,对于范围查询、索引覆盖扫描等操作来说,速度可能会降低很多 7

    2024年02月08日
    浏览(41)
  • 《高性能MYSQL》-- 查询性能优化

    查询性能优化 深刻地理解MySQL如何真正地执行查询,并明白高效和低效的原因何在 查询的生命周期(不完整):从客户端到服务器,然后服务器上进行语法解析,生成执行计划,执行,并给客户端返回结果。 一条查询,如果查询得很慢,原因大概率是访问的数据太多 对于低

    2024年03月11日
    浏览(55)
  • 《高性能MySQL》——查询性能优化(笔记)

    将查询看作一个任务,那么它由一系列子任务组成,实际我们所做的就是: 消除一些子任务 减少子任务的执行次数 让子任务运行更快 查询的生命周期大概可分为 = { 客户端 服务器 : 进行解析 , 生成执行计划 执行:包括到存储引擎的调用,以及用后的数据处理 { 排序 分组

    2024年02月13日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包