C#最后用一个元素增加一个数组

在我的程序中,我有一堆增长的数组,其中一个新元素逐个生长到数组的末尾。 我认为列表是我程序关键部分的速度瓶颈,因为与arrays相比,它们的访问时间较慢 – 切换到arrays可将性能提升到可接受的水平。 所以为了增长数组我正在使用Array.Resize。 这很好用,因为我的实现将数组大小限制为大约20个元素,因此Array.Resize的O(N)性能是有限的。

但是如果有一种方法可以在最后用一个元素增加数组而不必使用Array.Resize那就更好了。 我相信它会将旧数组的副本复制到新大小的数组中。

所以我的问题是,是否有更有效的方法在不使用List或Array.Resize的情况下将一个元素添加到数组的末尾?

List像数组一样具有恒定的时间访问权限。 对于’增长arrays’,你真的应该使用List

当您知道可能要向arrays支持的结构添加元素时,您不希望一次添加一个新大小。 通常最好通过在填满时将其大小加倍来生长arrays。

如前所述, List是您正在寻找的。 如果您知道列表的初始大小,则可以为构造函数提供初始容量,这将提高初始分配的性能:

 List values = new List(5); values.Add(1); values.Add(2); values.Add(3); values.Add(4); values.Add(5); 

无法调整数组大小,因此获取更大数组的唯一方法是使用Array.Resize创建新数组。

为什么不创建数组从开始有20个元素(或最多需要的容量),并使用变量来跟踪数组中使用的元素数量? 这样你就不必调整任何数组的大小。

List’s分配4个元素开始(除非你在构造它时指定容量),然后每4个元素增长。

你为什么不尝试与Array类似的东西? 即创建它有4个元素,然后当你插入第五个元素时,首先用另外4个元素增长数组。

增长数组AFAIK意味着分配新数组,将现有内容复制到新实例。 我怀疑这应该比使用List更快……?

以块(例如10)调整arrays大小并将其作为单独的变量(例如容量)存储起来要快得多,然后在达到容量时仅调整arrays大小。 这是列表的工作方式,但是如果您更喜欢使用数组,那么您应该考虑在更大的块中调整它们的大小,特别是如果您有大量的Array.Resize调用

我认为每个想要使用数组的方法都不会被优化,因为数组是一个静态结构,所以我认为最好使用List或其他动态结构。