简介

.NET 包含多个相互关联的类型,它们表示任意内存的连续的强类型区域。 这些方法包括:

  • System.Span<T>

    • 用于访问连续的内存区域
    • 得到该类型的实例:
      • 1个T类型的数组
      • 1个String
      • 1个使用 stackalloc 分配的缓冲区
      • 1个指向非托管内存的指针
    • 实例必须存储在堆栈(stack)上,因此有很对限制
      • 类的字段不能是此类型
      • 不能在异步操作中使用
  • System.ReadOnlySpan<T>

    • Span<T> 结构体的不可变版本
  • System.Memory<T>

    • 连续的内存区域的包装器
    • 实例创建
      • T 类型数组
      • String
      • 内存管理器
      • 实例可以存储在托管堆(managed heap)上,所以它没有 Span<T> 的限制
  • System.ReadOnlyMemory<T>

    • Memory<T> 结构的不可变版本。
  • System.Buffers.MemoryPool<T>

    • 它将强类型内存块从内存池分配给所有者

      • IMemoryOwner<T> 实例可以通过调用 MemoryPool<T>.Rent 从池中租用
      • 通过调用 MemoryPool<T>.Dispose() 将其释放回池中
  • System.Buffers.IMemoryOwner<T>

    • 表示内存块的所有者,管理其生命周期
  • MemoryManager<T>

    • 一个抽象基类,可用于替换 Memory<T> 的实现,以便 Memory<T> 可以由其他类型(如安全句柄(safe handles))提供支持
    • MemoryManager<T> 适用于高级方案。
  • ArraySegment<T>

    • 是数组的包装,对应数组中,从特定索引开始的特定数量的一系列元素
  • System.MemoryExtensions

    • 用于将String、数组和数组段(ArraySegment<T>)转换为 Memory<T> 块的扩展方法集

System.Span<T>System.Memory<T> 及其对应的只读类型被设计为:

  • 避免不必要地复制内存或在托管堆上进行内存分配
  • 通过 Slice 方法或这些类型的的构造函数创建它们, 并不涉及复制底层缓冲(underlying buffers): 只更新相关引用和偏移
    • 形象的说就是,只更新我们可以访问到的内存的位置和范围,而不是将这些内存数据复制出来

备注:

对于早期框架,Span<T>Memory<T>System.Memory NuGet 包中提供。

使用 memory 和 span

    • 由于 memory 和 span 相关类型通常用于在处理 pipeline 中存储数据,因此开发人员在使用 Span<T>Memory<T> 和相关类型时要务必遵循一套最佳做法。 Memory<T>Span<T> 使用准则中介绍了这些最佳做法。

【C# IO 操作 】内存包装类 Memory <T>和 Span<T> 相关类型的更多相关文章

  1. 内存包装类 Memory 和 Span 相关类型

    1. 前言 2. 简介 3. Memory<T>和Span<T>使用准则 3.1. 所有者, 消费者和生命周期管理 3.2. Memory<T> 和所有者/消费者模 ...

  2. java IO操作和计算操作:工作内存和主内存 volatile关键字作用;原子操作对象AtomicInteger ....

    应该停止但无法停止的计算线程 如下线程示例,线程实例中while循环中的条件,在主线程中通过调用实例方法更新后,while循环并没有更新判断变量是否还成立.而是陷入了while(true)死循环. i ...

  3. 【C# IO 操作 】内存之RAM、SRAM、DRAM、ROM、FLASH、SDRAM、DDR*

    内存 内存(Memory)指的是内存存储器,又称为主存,是CPU用来直接寻址和存储的空间,它相当于一座桥梁,用以负责诸如硬盘.主板.显卡等硬件上的数据与处理器之间数据交换处理,我们可以把内存看作数据缓 ...

  4. 内存泄漏(Memory Leak)

    什么情况下会导致内存泄露(Memory Leak)? Android 的虚拟机是基于寄存器的Dalvik,它的最大堆大小一般是16M,有的机器为24M.因此我们所能利用 的内存空间是有限的.如果我们的 ...

  5. FFmpeg内存IO模式(内存区作输入或输出)

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10318145.html 所谓内存IO,在FFmpeg中叫作"buffered ...

  6. 内存泄漏 Memory Leaks 内存优化 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  7. 每天3分钟操作系统修炼秘籍(14):IO操作和DMA、RDMA

    点我查看秘籍连载 I/O操作和DMA.RDMA 用户进程想要执行IO操作时(例如想要读磁盘数据.向磁盘写数据.读键盘的输入等等),由于用户进程工作在用户模式下,它没有执行这些操作的权限,只能通过发起对 ...

  8. RapidIO 逻辑层IO操作与Message操作的原理和区别

    接上一篇 SRIO RapidIO (SRIO)协议介绍(一) 1     说明 查看协议手册时会发现,逻辑层的操作分成了IO和Message 2类动作,那么为什么要分成2类操作?从原理和应用角度来看 ...

  9. python之协程与IO操作

    协程 协程,又称微线程,纤程.英文名Coroutine. 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用. 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B ...

随机推荐

  1. [源码分析] Facebook如何训练超大模型 --- (3)

    [源码分析] Facebook如何训练超大模型 --- (3) 目录 [源码分析] Facebook如何训练超大模型 --- (3) 0x00 摘要 0x01 ZeRO-Offload 1.1 设计原 ...

  2. 多线程-守护线程-setDaemon

    1 package multithread4; 2 /* 3 * 停止线程: 4 * 1,stop方法. 5 * 6 * 2,run方法结束. 7 * 8 * 怎么控制线程的任务结束呢? 9 * 任务 ...

  3. hashmap 实现 相同的key值时,value值叠加效果。

    一,了解一些基础 package com.ohs.demo; /** * * 一.需求是:停止相同的key值,覆盖效果,将重复的value值,叠加起来. * * 二.hash? 什么是hash? * ...

  4. 人工智能与智能系统2-> 机器人学2 | 时间与运动

    <Robotics, Vision and Control>学习到第三章,我才发现这本书是有配套视频的,第二章看的好辛苦,很多地方生硬理解了一下,现在打算把视频再好好看一看,作为补充,也会 ...

  5. 「ZJOI2017」树状数组

    「ZJOI2017」树状数组 以下均基于模2意义下,默认\(n,m\)同阶. 熟悉树状数组的应该可以发现,这题其实是求\(l-1\)和\(r\)位置值相同的概率. 显然\(l=1\)的情况需要特盘. ...

  6. 解决"Uncaught (in promise) Error: Navigation cancelled from "/" to "/login" with a new navigation"报错处理

    Uncaught (in promise) Error: Navigation cancelled from "/" to "/login" with a ne ...

  7. python基础语法_闭包详解

    https://www.cnblogs.com/Lin-Yi/p/7305364.html 闭包有啥用??!! 很多伙伴很糊涂,闭包有啥用啊??还这么难懂!  3.1装饰器!!!装饰器是做什么的??其 ...

  8. [源码解析] NVIDIA HugeCTR,GPU 版本参数服务器 --(1)

    [源码解析] NVIDIA HugeCTR,GPU版本参数服务器 --(1) 目录 [源码解析] NVIDIA HugeCTR,GPU版本参数服务器 --(1) 0x00 摘要 0x01 背景 1.1 ...

  9. Solution -「多校联训」查拉图斯特拉如是说

    \(\mathcal{Description}\)   Link.   给定 \(n\) 和 \(m\) 次多项式 \(f(x)\),求 \[\sum_{i=0}^n\binom{n}{i}f(i)\ ...

  10. Zookeeper应用之一:数据发布与订阅初体验

    Zookeeper到底是什么?可以从Zookeeper提供的功能来理解.本篇小作文就是使用其提供的功能之一:数据发布与订阅. 需求:服务端开启多个实例提供服务,客户端使用服务.如果服务端某个服务下线或 ...