我可以在不复制内存的情况下创建一个包含现有数组子集的新数组引用吗

本文关键字:数组 包含现 引用 一个 子集 新数组 复制 内存 情况下 创建 我可以 | 更新日期: 2023-09-27 17:51:08

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

在C#中可以做到这一点而不复制内存吗?

我可以在不复制内存的情况下创建一个包含现有数组子集的新数组引用吗

您可以使用ArraySegment<T>

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

这使您可以指定要传递的段的起点和终点,而无需复制任何数据。

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

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

来自MSDN

Array属性返回整个原始数组,而不是阵列;因此,数组返回的对数组所做的更改属性设置为原始数组。

这是一个DEMO