我正在使用C#构建一个文件阅读器,需要遍历大量数据。我希望每次读取到的元素都能使用相同的缓冲区,并将该缓冲区传递给客户端以进行进一步处理。如果能够返回正确大小的byte[]
而不是原始缓冲区和长度,API会更简洁。
在C#中,是否有可能实现这一点而不复制内存?
ArraySegment<T>
,它允许您指定要传递的段的起始和结束位置而不复制任何数据。具体请参考:http://msdn.microsoft.com/en-us/library/1hsbd92d.aspx。ArraySegment
类型是一种通用结构,允许我们存储有关数组范围的信息。它非常适用于存储数组范围。 ArraySegment
促进了减少内存复制和堆分配的优化。
来自MSDN;
Array属性返回整个原始数组,而不是数组的副本;因此,对由Array属性返回的数组所做的更改将应用于原始数组。
这里有一个DEMO
。