Jestem trochę zdezorientowany Parallel.ForEach
.
Co to jest Parallel.ForEach
i co dokładnie robi?
Proszę nie odwoływać się do żadnego łącza MSDN.
Oto prosty przykład:
string[] lines = File.ReadAllLines(txtProxyListPath.Text);
List<string> list_lines = new List<string>(lines);
foreach (string line in list_lines)
{
//My Stuff
}
Jak mogę przepisać ten przykład Parallel.ForEach
?
c#
multithreading
.net-4.0
parallel.foreach
SilverLight
źródło
źródło
Parallel
klasą a użyciem PLINQ.foreach
. Różnica polega na tym, że wersja równoległa może wykonywać wiele „akcji” jednocześnie. W większości przypadków (w zależności od tego, na którym komputerze jest uruchomiony kod, jak jest zajęty i innych rzeczy) będzie on szybszy, a to jest najważniejsza zaleta. Pamiętaj, że gdy robisz to równolegle, nie możesz wiedzieć, w jakiej kolejności są przetwarzane elementy. W przypadku zwykłego (seryjnego)foreach
masz gwarancję, żelines[0]
najpierw, a potemlines[1]
itd.Odpowiedzi:
źródło
List<T>
;)Foreach loop:
Parallel.ForEach:
Poniższy przykład wyraźnie pokazuje różnicę między tradycyjną pętlą foreach a
Przykład Parallel.ForEach ()
Wynik
Za pomocą przykładu Parallel.ForEach
źródło
Spowoduje to, że linie będą analizowane równolegle w pętli. Jeśli chcesz bardziej szczegółowego, mniej „zorientowanego na referencje” wprowadzenia do klasy Parallel, napisałem serię na TPL, która zawiera sekcję o Parallel.ForEach .
źródło
W przypadku dużych plików użyj następującego kodu (jesteś mniej głodny pamięci)
źródło
Te linie działały dla mnie.
źródło