2012-05-21 56 views
-1

我听说List<T>.AddRange(IEnumerable<T>)快于new List<T>(IEnumerable<T>)。查看反射器后,我无法分辨为什么广告一旦创建测试应用程序确实我看到它更快。为什么列表<T> .AddRange(IEnumerable的<T>)高于新表快<T>(IEnumerable的<T>)

有没有人有一个想法,为什么?

+4

你能粘贴示例代码?他们的表现会因你通过的物品而有所不同。 –

+1

“我听说......” - 不要相信你所听到的一切,特别是关于表演的一揽子表述。 – Joe

+0

@Joe它来自知道他的东西的人...... –

回答

1

对不起,我无法证实你的假设。 AddRange总是比构造函数变体慢。

我为它的一些测试代码:

一个)var list = new List<T>(enumerable);

快于

B)var list = new List<T>(); list.AddRange(enumerable);

测试了不同IEnumerables

列表:新:32ms addrange:47ms

的LinkedList:新:58ms的AddRange:99ms

HashSet的:新:56MS的AddRange:98ms

队列:新:271ms的AddRange:516ms

+1

我相信这个开销可以忽略不计。 –

+1

没有它没有。尝试测试。 – BlueM

+0

这不是OP要求的。由于您将'List '传递给构造函数,因此可以简单地将它用于复制到新列表中,而传递'IEnumarable(Enumerable.Range(1,1000000)')枚举必须枚举并逐一添加到新列表中。除此之外,我认为你的例子中的差异无论如何都是微不足道的。 –

相关问题