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

C#具有默认大小的通用列表或提供一个,c#,generics,C#,Generics,我想知道定义一个默认大小的列表或指定一个列表是否有区别(在性能、内存节省方面) List<object> m_objects = new List<object>(); or List<object> m_objects = new List<object>(100); List m_objects=new List(); 或 列表m_对象=新列表(100); 如果增加更多的项目,这两个都会增加一倍的大小,对吗 谢谢,如果您知道您将拥有1

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

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

or 

List<object> m_objects = new List<object>(100);
List m_objects=new List();
或
列表m_对象=新列表(100);
如果增加更多的项目,这两个都会增加一倍的大小,对吗


谢谢,

如果您知道您将拥有100多件物品,那么第二件会更快

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


如果您从未添加超过100项,那么只会浪费一点内存(特别是,
IntPtr.Size*(Capacity-Count)

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

var list=newlist();
int容量=列表容量;
WriteLine(“初始容量:{0}”,list.capacity);
对于(int i=0;i<10000;i++)
{
添加(新对象());
如果(list.Capacity>Capacity)
{
容量=列表容量;
WriteLine(“当计数为{1}时,容量为{0}”,list.Capacity,list.count);
}

列表
是一个隐藏的数组。它的初始大小看起来是4个元素。当超过该值时,基础数组将以两倍的大小重新分配。因此,如果您知道列表的可能最大大小,最好指定它,因为这样可以避免相对昂贵的分配和复制。

如果您的列表是尺寸小于100000,性能在毫秒内相同


但是,如果您的列表大于1000000,则第二种方法会更快。

是的,两种方法的大小都会增加一倍。是的,第二种方法更快,但您必须执行数百万次才能衡量差异。
        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);
            }