默认大小或供应一个C#通用列表
问题描述:
我想知道是否有区别(在性能方面,内存保存)定义一个默认大小的列表或指定一个。默认大小或供应一个C#通用列表
List<object> m_objects = new List<object>();
or
List<object> m_objects = new List<object>(100);
如果添加更多项目,两者都会增加一倍,对吗?
谢谢,
答
如果你知道你将有超过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大,第二种方式会更快。
是的,两者都会增加一倍。 – Gabe