C# 在不复制和/或分配的情况下创建子阵列
我是C#的新手,想知道如何做到以下几点: 我创建了一个数组,其大小为我需要存储的最大元素数:C# 在不复制和/或分配的情况下创建子阵列,c#,arrays,C#,Arrays,我是C#的新手,想知道如何做到以下几点: 我创建了一个数组,其大小为我需要存储的最大元素数: int[] myArray = new int[64000]; 我正在将此阵列传递给第三方API。在这个API中,他们使用.Length属性来确定元素的数量。我不希望发生这种情况,因为数组长度是最大计数,而不是“活动计数”(即使用的元素数) 考虑到这一点,是否有办法创建另一个数组,其大小等于活动计数?而且,这可以在没有副本和/或分配的情况下完成吗?我已经有了分配的内存——我所要做的就是在很好地使用第三
int[] myArray = new int[64000];
我正在将此阵列传递给第三方API。在这个API中,他们使用.Length
属性来确定元素的数量。我不希望发生这种情况,因为数组长度是最大计数,而不是“活动计数”(即使用的元素数)
考虑到这一点,是否有办法创建另一个数组,其大小等于活动计数?而且,这可以在没有副本和/或分配的情况下完成吗?我已经有了分配的内存——我所要做的就是在很好地使用第三方API的同时指出感兴趣的子区域。如果第三方API接受
int[]
,传递数据的唯一方法就是复制
如果不需要,可以很容易地设计API(即:传递元素的数量,或使用ArraySegment
等),但是如果API不支持它,则需要一个副本
请注意,您可以使用大容量复制项,而不是在循环中进行复制。听起来您应该使用
列表而不是数组,如果您不知道集合中将包含多少项。接受数组的API部分(方法)的确切声明是什么?我使用的是Unity,我正在做的是填充/管理垂直/法线/切线/uv/三角形数组。我想要一个这些数组的池,其中每个数组都是预先确定的最大大小。然后,随着内容的出现/消失,数组被填充(并不总是100%),我将它们传递给UnityEngine.Mesh()的一个实例。要填充UnityEngine.Mesh中的数组,我只需分配一个数组引用。没有副本。如果我想管理我自己的池,我现在必须分配精确大小的数组,并让它们进行垃圾收集。这违背了使用这些池的意义。我宁愿管理我自己的记忆,但我在这里没有看到很多选择。。。