首页 > 解决方案 > 是否有接受 Span 的 MemoryStream或内存?

问题描述

我正在从许多来源(MemoryMappedFiles 或 FileStream)读取数据。一个问题是,每次读取字节、整数或其他类型的调用都非常慢。所以我想把一大块数据读入一个数组,然后把它交给一个轻量级的内存流,并在那里读取各个组件。

问题是 .NET 的当前 MemorySrream 确实只允许在构造函数中使用数组,但我需要一个能够处理 Span 或 Memor 的 Stream。有一个 ReadOnlyMemoryStream 作为深埋在 .NET 源代码中的内部类。

有趣的是,尽管 ReadOnlyMemoryStream 比 MemoryStream 慢,但我认为它不应该有很大的不同。

有没有更好的实现方式?

标签: c#.net.net-core

解决方案


如果你有一个Span,你已经和它一样快了,直接通读它而不是在它上面放一个流。

甚至可以Span让您访问真正漂亮的东西,例如struct没有副本的直接映射 ( MemoryMarshal.Cast)、跨度增量(相当于流前进,部分Unsafe.Add)、如果实际需要则块副本 ( Unsafe.Copy) 等。


推荐阅读