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);
}