我正在用 C# 构建一个文件阅读器,将枚举大量数据。我想为我读出的每个元素使用相同的缓冲区,然后传递缓冲区以供客户端进一步处理。byte[]
如果我可以返回正确大小的 a 而不是原始缓冲区和长度,API 会更干净。
是否可以在不复制内存的情况下在 C# 中执行此操作?
您可以使用ArraySegment<T>
http://msdn.microsoft.com/en-us/library/1hsbd92d.aspx
这使您可以指定要传递的段的开始和结束,而无需复制任何数据。
如果您可以更改 API 参数类型,我认为您可以使用ArraySegment。
ArraySegment
type 是一个通用结构,它允许我们存储有关数组范围的信息。它对于存储数组范围很有用。这ArraySegment
有助于减少内存复制和堆分配的优化。
来自MSDN;
Array 属性返回整个原始数组,而不是数组的副本;因此,对 Array 属性返回的数组所做的更改是对原始数组进行的。
这是一个DEMO
.