4

我正在用 C# 构建一个文件阅读器,将枚举大量数据。我想为我读出的每个元素使用相同的缓冲区,然后传递缓冲区以供客户端进一步处理。byte[]如果我可以返回正确大小的 a 而不是原始缓冲区和长度,API 会更干净。

是否可以在不复制内存的情况下在 C# 中执行此操作?

4

3 回答 3

7

您可以使用ArraySegment<T>

http://msdn.microsoft.com/en-us/library/1hsbd92d.aspx

这使您可以指定要传递的段的开始和结束,而无需复制任何数据。

于 2013-01-10T09:47:33.713 回答
4

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

于 2013-01-10T09:47:25.263 回答
1

ArraySegmenttype 是一个通用结构,它允许我们存储有关数组范围的信息。它对于存储数组范围很有用。这ArraySegment有助于减少内存复制和堆分配的优化。

来自MSDN

Array 属性返回整个原始数组,而不是数组的副本;因此,对 Array 属性返回的数组所做的更改是对原始数组进行的。

这是一个DEMO.

于 2013-01-10T10:19:56.690 回答