默认大小或供应一个C#通用列表

默认大小或供应一个C#通用列表

问题描述:

我想知道是否有区别(在性能方面,内存保存)定义一个默认大小的列表或指定一个。默认大小或供应一个C#通用列表

List<object> m_objects = new List<object>(); 

or 

List<object> m_objects = new List<object>(100); 

如果添加更多项目,两者都会增加一倍,对吗?

谢谢,

+1

是的,两者都会增加一倍。 – Gabe

如果你知道你将有超过100个项目,第二个更快。每当“双击”时,它需要复制整个现有数组的内容。对于大型列表,这可能会很慢。
如果指定容量,则不需要调整大小,直到大于指定的大小为止。

如果你从不添加100余项,它甫一浪费一些内存使用(特别是IntPtr.Size * (Capacity - Count)

+0

是的,第二个是更快,但你必须做它数百万次来衡量差异。 – Gabe

列表的容量从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大,第二种方式会更快。