具有默认大小的c#通用列表或提供一个

本文关键字:一个 列表 默认大小 | 更新日期: 2023-09-27 18:07:41

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

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

如果添加更多的元素,它们都将通过加倍来增加大小,对吗?

谢谢,

具有默认大小的c#通用列表或提供一个

如果你知道你将有超过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,第二种方法会更快。