簡體   English   中英

在這種情況下,AddRange()會比ToList()快嗎?

[英]Would AddRange() be faster than ToList() in this case?

我有一個用逗號分隔的字符串ctext ,我想將其拆分並放入List<string>

將使用LINQ,

List<string> f = ctext.Split(',').ToList();

比不使用LINQ慢?

List<string> f;
f.AddRange(ctext.Split(','));

看起來LINQ實際上會在某個地方復制某些內容,這會使它變慢,而AddRange()只會檢查一次列表的大小,將其展開並轉儲到其中。

還是有更快的方法? (就像使用for循環一樣,但我對此表示懷疑。)

幸運的是,既然ToList是開源的,我們可以輕松地查看它的功能。 (點擊鏈接以獲取最新消息...)

我以前沒有見過IListProvider<T> ,但是我懷疑是否有一個數組實現了它,這意味着我們基本上有了new List<TSource>(source) 查看List<T>源表明,構造函數和AddRange基本上都使用CopyTo結束。

換句話說,除了一些間接的級別外,我希望它們都能做同樣的事情。

看起來LINQ實際上會在某個地方復制某些內容,這會使它變慢,而AddRange()只會檢查一次列表的大小,將其展開並轉儲到其中。

您認為這兩種情況都在發生是正確的,但是在認為每種情況都特定於該操作時是錯誤的。 ToListAddRange都可以做這些事情。 這兩個操作都將輸入序列中的所有值都復制到列表中,並且由於這兩個操作都同時添加了多個項目,因此他們能夠一次看到擴展列表內部容量的數量,而不是一次需要執行多次擴展。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM