【发布时间】:2009-01-08 20:26:06
【问题描述】:
.Net 中的许多集合类(即 List
【问题讨论】:
标签: .net collections
.Net 中的许多集合类(即 List
【问题讨论】:
标签: .net collections
使用此构造函数是最佳实践吗?
当然。在处理大量数据时,这可能会提高应用程序的效率,因为它可以有效地防止在连续填充容器时重复分配和复制大数据批次。
举一个使用List数据结构的例子:
在这两种情况下,插入实际上具有相同的摊销常量运行时间。这意味着无论容器大小如何,Add 操作都将花费恒定的时间。然而,这只是平均水平。如果容器必须在内部调整大小,否则会溢出,那么Add 操作实际上需要 O(n),即它的时间与容器的大小成正比。
在添加许多元素的过程中,这并不重要,但是对于大型 n,如果 UI 冻结,用户可以感知到单个插入操作 在那段时间。
如果您从一开始就已经预留了足够大的容量,这将永远不会发生。
如果是这样,它们是否有关于你应该使用某种“幻数”的规则?
没有。如果您知道(甚至是近似的)大小,请使用它。如果你不这样做,请不要打扰。这些容器的自动放大策略是实际上相当不错,而且在大多数情况下猜测会变得更糟糕(除非你有一个明智的猜测,但它根本不是真正的猜测,是吗?)。
【讨论】:
由于List<T> 对象的大小以 2 的次方增长,因此指定初始大小在性能方面并不重要,除非您知道集合会变得非常大。在这种情况下,将集合初始化为较大的大小以避免多次调整大小可能是有意义的。
通常,如果我在创建集合之前确切知道集合的大小,我只需创建一个数组并将其作为IEnumerable<T>返回
【讨论】: