List<Class>() vs List<Class>(0)
本文关键字:gt Class List lt vs | 更新日期: 2023-09-27 18:03:42
执行这两行代码有什么区别吗?
IList<Class> list = new List<Class>();
和
IList<Class> list = new List<Class>(0);
我被告知,首先,无容量的构造函数更有效,因为与容量为0的构造函数相比,它分配的内存更少。我已经搜索了MSDN,它写在那里,列表的默认容量是0无论如何,我没有看到任何逻辑在这…
有人能证实或否认这个理论吗?
在http://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs,cf7f4095e4de7646
的帮助下,你可以很容易地回答这个问题public List() {
_items = _emptyArray;
}
和
public List(int capacity) {
if (capacity < 0) ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.capacity, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
Contract.EndContractBlock();
if (capacity == 0)
_items = _emptyArray;
else
_items = new T[capacity];
}
您可以自己看到:如果没有提供初始容量(ctor()
),则内部_items
阵列被设置为_emptyArray
,这与ctor(0)
的行为相同。这看起来像是对所有ctor(0)
调用的内部优化,以避免空数组的(多余)分配。
ctor(capacity)
来避免调整大小(这里实现了调整大小,每次写入时调用)。