Jaka jest różnica między funkcjami AddRange i Concat na ogólnej liście? Czy jeden jest lepszy od drugiego?
.net
linq
list
extension-methods
johnc
źródło
źródło
Duża różnica polega na tym, że AddRange mutuje listę, względem której jest wywoływana, podczas gdy Concat tworzy nową listę. Dlatego mają różne zastosowania.
Ponadto Concat jest metodą rozszerzającą, która ma zastosowanie do dowolnego IEnumerable i zwraca IEnumerable, którego potrzebujesz .ToList (), aby uzyskać nową Listę.
Jeśli chcesz rozszerzyć zawartość istniejącej listy, użyj AddRange.
Jeśli tworzysz nową listę z dwóch źródeł IEnumerable, użyj Concat z .ToList. Ma to tę zaletę, że nie powoduje mutacji żadnego ze źródeł.
Jeśli kiedykolwiek potrzebujesz wyliczyć zawartość dwóch list (lub dowolnego innego IEnumerable), po prostu użyj Concat za każdym razem, ma to tę zaletę, że w rzeczywistości nie przydzielasz nowej pamięci do przechowywania ujednoliconej listy.
źródło
Znalazłem ten interesujący artykuł, w którym omówiono różnicę między tymi 2 strukturami i porównałem ich wydajność ...
Główną ideą jest to, że AddRange działa znacznie szybciej, gdy chodzi o kolekcje o dużych rozmiarach.
Oto link
Mam nadzieję że to pomoże,
źródło
Concat
orazAddRange
zList<KeyValuePair<string, string>>
1000 elementów, łączone / dodaje się 100 razy, aAddRange
był bardzo szybciej. Wyniki były następujące:AddRange
13 ms,Concat().ToList()
16 000 ms, aConcat
przyIEnumerable
robieniu tylkoToList
na końcu: 2700 ms.