C#

2023-10-26

在这里插入图片描述

System.IO.Pipelines 很酷的读写数据流方式!

前言

文本分享一种新的读写数据流方式 —— System.IO.Pipelines。这个东西在 .NET Core 2.1 中出现了,它能够帮助你更高效地处理数据流。

System.IO.Pipelines 是啥?

System.IO.Pipelines 是一个用于读写数据流的高性能 API。它主要由三个部分组成:PipePipelineReaderPipelineWriter

Pipe 是一个异步线程安全的缓冲区,它让数据在生产者和消费者之间流动。PipelineReader 和 PipelineWriter 则是 Pipe 的读取和写入端点。

有什么优点?

这个东西有以下优点:

  1. 高性能:System.IO.Pipelines 能够处理大量数据,而且不需要额外的内存分配,这意味着你可以减少内存使用量。
  2. 低延迟:它能够在不阻塞线程池中的线程的情况下处理数据,这意味着你的应用程序能够更快地响应请求。
  3. 异步读写:System.IO.Pipelines 支持异步读写,这意味着你的应用程序能够同时处理多个请求,而不会阻塞线程池中的线程。
  4. 可扩展性:System.IO.Pipelines 可以很容易地扩展到多个处理器,从而实现高并发处理。

有哪些应用场景?

网络编程

如果你正在编写一个网络应用程序,那么 System.IO.Pipelines 可能是你的最佳选择。它能够帮你高效地处理大量的网络数据流。你可以使用 PipelineWriter 将数据写入缓冲区,在另一个线程中使用 PipelineReader 读取缓冲区中的数据,并进行处理。这样可以大大减少内存分配和线程阻塞的情况,从而提高应用程序的响应速度。

文件处理

如果你需要处理大量的文件数据,那么 System.IO.Pipelines 也是非常有用的。你可以将文件分块读取到缓冲区中,然后使用 PipelineReader 读取缓冲区中的数据,并进行处理。这样可以大大减少内存分配和文件 I/O 的开销,从而提高文件处理的效率。

怎么使用?

分成三个步骤:

  1. 创建 Pipe:创建一个缓冲区,用于读取和写入数据。
  2. 写入数据:使用 PipelineWriter 将数据写入缓冲区。
  3. 读取数据并处理:使用 PipelineReader 读取缓冲区中的数据,并进行处理。

下面是一个简单的示例,演示使用 System.IO.Pipelines 读取并处理字节数组:

using System;
using System.Buffers;
using System.IO.Pipelines;
using System.Threading.Tasks;

namespace PipelinesTest
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var data = new byte[] { 1, 2, 3, 4, 5 };

            // 创建缓冲区
            var pipe = new Pipe();

            // 写入数据到缓冲区
            await pipe.Writer.WriteAsync(data);

            // 读取数据并处理
            while (true)
            {
                var result = await pipe.Reader.ReadAsync();
                var buffer = result.Buffer;

                try
                {
                    if (buffer.IsEmpty && result.IsCompleted)
                    {
                        break;
                    }

                    // 处理数据
                    foreach (var segment in buffer)
                    {
                        Console.WriteLine(segment.Span[0]);
                    }
                }
                finally
                {
                    // 将已处理的数据从缓冲区中删除
                    pipe.Reader.AdvanceTo(buffer.End);
                }
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 的相关文章

  • 在 2 个 .c 文件之间共享函数

    dir1有dir2 file1 c和file1 h dir2 有 file2 c 现在 如果我想在 file2 c 中访问 file1 c 中定义的函数 我需要在 file1 h 中声明它并在 file2 c 中包含 file1 h 这是一
  • 在子目录中构建共享库

    我正在尝试构建一个使用一些 C 代码的 R 包 我有一个编译为可执行文件的 C 库 可以从命令行调用 有一个与之关联的 Makefile 我正在尝试获取信息here http cran r project org doc manuals R
  • 在宏中使用 # [重复]

    这个问题在这里已经有答案了 请解释一下代码 include
  • 错误 C2065:'cout':未声明的标识符

    我正在处理我的编程作业的 驱动程序 部分 但我不断收到这个荒谬的错误 错误 C2065 cout 未声明的标识符 我什至尝试过使用std cout但我收到另一个错误 IntelliSense 命名空间 std 没有成员 cout 当我宣布u
  • 如何将 QSerialPort 模块添加到 CMake 中?

    我想将 QSerialPort 模块添加到 CMake 中 根据我的理解 我需要将QT 串口添加到 pro中 我只想使用 CMake 所以我尝试编译简单的 CMake 文件 但有错误 QtCore 正在工作 qDebug 可以毫无问题地显示
  • MVVM 同步集合

    是否有一种标准化方法可以将 Model 对象集合与 C 和 WPF 中匹配的 ModelView 对象集合同步 我正在寻找某种类 可以使以下两个集合保持同步 假设我只有几个苹果 并且可以将它们全部保存在内存中 换句话说 我想确保如果我将 A
  • 持续运行的 C# 代码 - 服务还是单独的线程?

    我有一个 NET 4 Web 应用程序 它有 3 个关联的独立项目 DAL BAL 和 UI 我正在使用实体框架进行数据库交互 我有代码循环遍历一堆数据库数据 根据找到的内容调用方法 然后更新数据库 我希望这段代码一直运行 同时 我希望用户
  • 如何在 WCF 中反序列化自定义 SOAP 标头?

    我正在尝试向通过 WCF 的所有 SOAP 请求添加自定义标头 我发现这篇精彩的文章 http blogs msdn com b mohamedg archive 2012 10 21 adding custom soap headers
  • 第三方引用的 dll 未被复制来构建

    我有一个第三方 net dll 被我的 dll 类库项目 A 引用和使用 我的控制台应用程序项目 B 引用项目 A 我的问题是第三方 dll 没有被复制到控制台应用程序项目 B 的构建中 这里有什么问题呢 我的 dll 类库中引用的第三方
  • 如何让 PCRE 与 C++ 一起使用?

    这是一个新手问题 但我希望我能尽可能清楚地表达我的问题 我正在尝试用 C 进行模式匹配 我已经从以下位置下载了 PCRE 的 Win32 版本here http gnuwin32 sourceforge net packages pcre
  • 内存不足异常

    我正在使用 C 和 asp net 开发一个网络应用程序 我一直收到内存不足的异常 该应用程序的作用是从数据源读取一堆记录 产品 可能是数百 数千 通过向导中的设置处理这些记录 然后使用处理的产品信息更新不同的数据源 虽然有多个 DB 类
  • 嘲笑会员用户

    我目前正在开发一个 asp net mvc 2 应用程序 它使用默认的 SqlMembershipProvider 进行身份验证 我已经实现了一个控制器方法 通过调用读取当前用户的 ProviderUserKeyMembership Get
  • 如何在Windows Azure上调用ffmpeg.exe转换音频文件?

    我在 Windows Azure 上运行 Web 角色来接收 AAC 音频文件 通过 base64 字符串上传 并将它们存储到 blob 中 现在效果很好 接下来 我还必须将它们转换为 MP3 并将 MP3 存储到 blob 中 我决定使用
  • 是否有理由为什么用 XmlInclude 修饰的基类在序列化时仍然会抛出类型未知的异常?

    我将简化代码以节省空间 但所提供的内容确实说明了核心问题 我有一个类 它的属性是基类型 有 3 个派生类可以分配给该属性 如果我将任何派生类分配给容器并尝试序列化容器 XmlSerializer 会抛出可怕的错误 类型 x 不是预期的 使用
  • 没有类型的 IEnumerable 属性

    我正在尝试创建一个类似于来自 MSDN 的官方 DataGrid ItemsSource 的属性 public IEnumerable ItemsSource get set 这提供了对任何派生类中任何类型的支持 有了这个 我可以设置类似的
  • Subsonic 3 ActiveRecord 嵌套选择导致 NotIn 错误?

    我有以下 Subsonic 3 0 查询 其中包含嵌套的 NotIn 查询 public List
  • 如何以一对一/零关系更新员工和身份用户

    我正在尝试更新员工记录 也想更新身份用户 如果我先单独更新身份用户 例如 UserManager Update user Context Entry employee State System Data Entity EntityState
  • 从不同的线程访问对象

    我有一个服务器类 它基本上等待来自客户端的连接 在该类中 我创建了一个 NetworkStream 对象 以便能够从客户端接收字节 由于 NetworkStream Read 方法不是异步的 这意味着它将等到从客户端读取字节才能继续执行类似
  • 如何从与 C# lambda 集成(而非代理集成)的 Amazon API 网关获取正确的 http 状态代码?

    我正在使用 C lambda 与 API 网关集成 我希望 API 网关返回正确的错误代码 例如 400 404 500 等 API网关模块tf文件 provider aws version lt 2 70 0 region var aws
  • Unity 错误“内部构建系统错误。后端退出,代码为 -1073740791。”摧毁/杀死了我的项目

    好吧 我可能在这里夸大了 但这是真的 当我开始打开它时 该项目由于错误 内部构建系统错误 后端退出 代码为 1073740791 而被破坏 应用程序 这个项目已经在Google Play上发布了 也许和设置有关 有人可以帮忙吗 完整错误 I

随机推荐

  • 数据分析毕业设计 招聘网站大数据分析与可视化系统 - python flask

    文章目录 0 前言 1 课题背景 2 实现效果 3 Flask框架 4 Echarts 5 爬虫 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学
  • Java list.sort() 写法

    1 完整版 list sort new Comparator
  • Java实现百度云vin识别接口代码

    本文是service调用shibie方法 controller略 public class ImagesService public static String getResult String otherHost https aip ba
  • Cesium--一些实验过程中的效果记录

    1 一种反射效果 片元着色器代码 fragmentShaderSource in vec3 v positionMC in vec3 v positionEC in vec2 v st void main czm materialInput
  • 苹果电脑如何同时运行Mac和Windows--pd18

    如何同时运行Mac和Windows呢 这里为大家推荐pd18 全名Parallels Desktop 18虚拟机 是很火爆的一款软件 可以在Mac上无缝衔接Windows系统 并且不用重启 可以同时运行 设置不同的桌面 两指手势 滑动就可以
  • 判定通视的计算法公式_测量学简答题(5篇范例)

    计算改正后的导线边的坐标增量 推算未知点的平面坐标 8 水准测量时为什么要求前后视距相等 水准仪视准轴不平行于管水准器轴之差称为i角 当每站的前后视距相等时 i角对前后视读数的影响大小相等 符号相同 计算高差时可以抵消 9 视差是如何产生的
  • 服务器名称显示空,服务器名称为空

    服务器名称为空 内容精选 换一换 当您想要通过华为云的云解析服务为您的邮箱服务器提供解析服务 可以参考本操作为域名配置邮箱解析 例如 搭建一个邮箱服务器 如果要实现通过mail example com登录邮箱 并使用域名作为SMTP IMA
  • javascript中各种数据类型比较及类型转换

    前言 Js中的数据类型可以分为Js中的数据类型可以分为原始值和引用值两大类 原始值存储在栈内存中 引用值存储在堆内存中 栈内存中会保存应用值的指针以供调用 属于原始值的数据类型有 number string undefined boolea
  • UE4平滑视角缩放

    Tick接Interp函数 用来做一个平滑过渡的值 这个值代表了一个从当前值到目标值的过渡 然后还有速度 当前值就是Target Arm Length 目标值新建一个变量 值和默认的Target Arm Length一样 下面滚轮事件 改I
  • Jenkins可持续集成_序:为什么要学习持续集成?

    阅读须知 上传的是图片 要看清楚请点击图片放大查看 版权声明 本图片来自于网络 如果涉及侵权问题 请及时联系本人删除 其他声明 本文章严禁转载 转载于 https blog 51cto com wangxiaoke 2367404
  • steam服务器连接不稳定WIN10,小编操作win10系统steam连接不稳的解决步骤

    我们的电脑都安装的是windows系统来进行办公或者娱乐 有时候会遇到一些比如win10系统steam连接不稳的问题 我们通过调查发现不少用户都碰到了win10系统steam连接不稳的问题 如果你现在找不到专业的人员来解决win10系统st
  • Android Studio 中Intel HAXM安装与模拟器创建

    Intel HAXM Hardware Accelerated Execution Manager 使用基于 Intel R Virtualization Technology VT 的硬件加速 因此需要 CPU 支持 VT 而且仅限于 I
  • C语言算法--快速排序法

    C语言算法 快速排序法 1 什么是快速排序法 快速排序 Quicksort 是一种常用的排序算法 它基于分治的思想 它的核心思想是选择一个基准元素 将数组划分为两个子数组 使得左边的子数组中的所有元素都小于等于基准元素 右边的子数组中的所有
  • 网络层IP协议

    一 IP协议的报文格式 1 4位版本号 目前只有IPv4和IPv6两个版本 所以这里只能填4或6 2 4位首部长度 4个bit能表示的最大数字是15 而这里的单位是4个字节 所以首部长度最大为15 4 60个字节 3 8位服务类型 8位服务
  • drawio 二次开发

    目的 使用drawIO 进行绘图 然后保存的时候 存到MySQL 下次打开的时候 可以遍历MySQL的所有文件 点击指定文件 可以在新的画布上展示已有的绘图 step1 开发环境 默认使用tomcat 部署 改造成spring boot 部
  • 实现水平居中的几种方式

    一 利用定位 利用绝对定位 translate div width 100px height 100px background color aquamarine position absolute top 50 left 50 transf
  • 为什么在 2023 年只使用 console.log 是一个大禁忌

    这里有 5 个必须知道的控制台对象方法和技巧 在 2023 年 您是否仍在使用它console log来满足所有 JavaScript 调试需求 是时候提升您的技能并发现 JavaScript 控制台对象的全部功能了 从console ta
  • 遇到:ValueError: not enough values to unpack (expected 2, got 1) 错误应该如何解决

    遇到 ValueError not enough values to unpack expected 2 got 1 错误通常表示你在尝试解包 unpack 一个序列时 但是序列的元素数量不够 解包操作期望的元素数量与实际的元素数量不匹配
  • python-OpenCV图像图形检测(四)

    实例下载 图形检测 检测图形轮廓 边缘检测 轮廓拟合 一 简介 图形检测是计算机视觉的一项重要功能 通过图形检测可以分析图像中可能存在的形状 然后对这些形状进行描绘 例如 搜索并绘制图像的边缘 定位图像的位置 判断图像中有没有直线 有没有圆
  • C#

    System IO Pipelines 很酷的读写数据流方式 文章目录 System IO Pipelines 很酷的读写数据流方式 前言 System IO Pipelines 是啥 有什么优点 有哪些应用场景 网络编程 文件处理 怎么使