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