具有默认大小的c#通用列表或提供一个
本文关键字:一个 列表 默认大小 | 更新日期: 2023-09-27 18:07:41
我想知道定义一个默认大小的列表或指定一个列表是否有区别(在性能,内存节省方面)。
List<object> m_objects = new List<object>();
or
List<object> m_objects = new List<object>(100);
如果添加更多的元素,它们都将通过加倍来增加大小,对吗?
谢谢,
如果你知道你将有超过100个项目,第二个更快。
每次它"double up"时,它需要复制整个现有数组的内容。对于大列表,这可能很慢。
如果您指定了容量,则根本不需要调整大小,直到它比您指定的大。
如果您从不添加超过100个条目,它只会浪费一点内存(特别是IntPtr.Size * (Capacity - Count)
)
如果没有在构造函数中指定,则列表的容量从0开始,并且在必要时增加(首先到4,然后始终是前一个值的两倍)。
var list = new List<object>();
int capacity = list.Capacity;
Console.WriteLine("Initial capacity: {0}", list.Capacity);
for (int i = 0; i < 10000; i++)
{
list.Add(new object());
if (list.Capacity > capacity)
{
capacity = list.Capacity;
Console.WriteLine("Capacity is {0} when count is {1}", list.Capacity, list.Count);
}
List<T>
实际上是一个数组。它的初始大小看起来是4个元素。当超过该值时,底层数组将以两倍的大小重新分配。因此,如果您知道列表可能的最大大小,您最好指定它,因为您将避免相对昂贵的分配和复制。
如果列表的大小小于100,000,则以毫秒计的性能是相同的!
但是如果你的列表大于1,000,000,第二种方法会更快。