首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阅读流: Byte[] vs Memory<Byte> vs Span<Byte>

阅读流: Byte[] vs Memory<Byte> vs Span<Byte>
EN

Stack Overflow用户
提问于 2021-07-24 18:24:38
回答 1查看 353关注 0票数 0

它们之间的根本区别是什么:

代码语言:javascript
复制
var buffer = new byte[8192];
var bytesRead = Stream.Read(buffer, 0, buffer.Length);
代码语言:javascript
复制
var buffer = new byte[8192];
var span = new Span<byte>(buffer);
var bytesRead = Stream.Read(span);
代码语言:javascript
复制
var buffer = new byte[8192];
var memory = new Memory<byte>(buffer);
var bytesRead = Stream.ReadAsync(memory).Result;

排除一个显而易见的事实,即它们都是不同的对象类型,并且唯一接受Memory<Byte>Stream.Read()方法当然是ReadAsync()

为什么我要选择byte[]Span<byte>Memory<byte>中的任何一个?我该如何决定哪一个最适合我的情况?

EN

回答 1

Stack Overflow用户

发布于 2021-07-25 02:04:15

假设这个问题是关于内存/跨度/数组而不是读/读异步的,那么在这个例子中没有根本的区别。

不同之处在于Memory/Span是内存的抽象,有点像安全指针。它们可以表示常规的c#数组,但也可以表示非托管内存。它们也可能代表另一种类型的内存。因此,如果某些代码将数据加载到字节数组中,您可以将其转换为整型数组,而无需进行大量复制。如果您不希望该方法访问所有数据,它还支持切片。

Memory和Span之间的区别主要是Span更高效,但在如何使用它方面有一些限制。

因此,使用与您拥有的数据相匹配的任何数据。如果你正在设计一个API,通常最好采用最通用的类型,即Span/ReadonlySpan,也许为了方便,还可以添加重载或扩展方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68509079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档