2012-05-21 69 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)')枚舉必須枚舉並逐一添加到新列表中。除此之外,我認爲你的例子中的差異無論如何都是微不足道的。 –

相關問題