【发布时间】:2020-08-28 15:33:09
【问题描述】:
我正在从多个来源(MemoryMappedFiles 或 FileStream)读取数据。一个问题是每次读取字节、整数或其他类型的调用都非常慢。所以我想把一大块数据读入一个数组,然后把它交给一个轻量级的内存流,然后读取那里的各个组件。
问题是 .NET 的当前 MemorySrream 确实只允许在构造函数中使用数组,但我需要一个能够处理 Span 或 Memor 的 Stream。有一个 ReadOnlyMemoryStream 作为一个深埋在 .NET 源代码中的内部类。
有趣的是,尽管 ReadOnlyMemoryStream 比 MemoryStream 慢,但我认为它不应该有很大的不同。
有没有更好的实现方式?
【问题讨论】:
-
Span<T>不能工作,因为它是仅堆栈的并且不能是像MemoryStream这样的堆分配类的一部分。应该可以在Memory<T>上创建一个 Stream,但我不知道这样的实现。 -
@KlausGütter:你当然是对的。似乎我需要创建自己的类,一个是 ref 结构,一个是常规结构或类,以便我可以使用 Span
或 Memory 。我知道的 .NET Core 源类中唯一可用但内部的类是 ReadOnlyMemoryStream,它接受 Memory .