gpt4 book ai didi

c# - 列表<类>() 与列表<类>(0)

转载 作者:行者123 更新时间:2023-11-30 19:37:10 25 4
gpt4 key购买 nike

执行这两行代码有什么区别吗:

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-calls 都不是真正的内存有效。这是数据结构的本质,它会相应地动态扩展。因此,只要您预先知道实际容量,就应该调用 ctor(capacity) 以避免调整大小(已实现 here 并在每次写入时调用)。

关于c# - 列表<类>() 与列表<类>(0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39124189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com