我能否创建一个包含现有数组子集的新数组引用,而不复制内存?

4

我正在使用C#构建一个文件阅读器,需要遍历大量数据。我希望每次读取到的元素都能使用相同的缓冲区,并将该缓冲区传递给客户端以进行进一步处理。如果能够返回正确大小的byte[]而不是原始缓冲区和长度,API会更简洁。

在C#中,是否有可能实现这一点而不复制内存?


传递一个基于原始缓冲区特定区域的MemoryStream怎么样? - Clemens
3个回答

7

4

如果您可以更改API参数类型,那么我认为您可以使用 ArraySegment


1

ArraySegment类型是一种通用结构,允许我们存储有关数组范围的信息。它非常适用于存储数组范围。 ArraySegment 促进了减少内存复制和堆分配的优化。

来自MSDN;

Array属性返回整个原始数组,而不是数组的副本;因此,对由Array属性返回的数组所做的更改将应用于原始数组。

这里有一个DEMO


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接