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

我想知道是否存在差异(在性能,内存节省方面)来定义具有默认大小的列表或指定一个列表。

List m_objects = new List(); or List m_objects = new List(100); 

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

谢谢,

如果您知道您将拥有超过100个项目,那么第二个项目会更快。

每次“双倍”时,它都需要复制整个现有数组的内容。 对于大型列表,这可能很慢。
如果指定容量,则根本不需要resize,直到它大于您指定的大小。

如果你从不添加超过100个项目,它只会浪费一点内存(特别是IntPtr.Size * (Capacity - Count)

如果未在构造函数中指定,则列表的容量从0开始,并且必要时会增加(首先是4然后总是加倍前一个值)。

  var list = new List(); 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是一个数组。 它的初始大小看起来是4个元素。 超过该值时,将使用两倍大小重新分配基础数组。 因此,如果您知道列表可能的最大大小,最好指定它,因为您将避免相对昂贵的分配和复制。

如果您的列表大小小于100,000,则性能相同(以毫秒为单位)!

但如果你的名单大于1,000,000,那么第二种方式会更快。