Я трохи розгублений Parallel.ForEach
.
Що таке Parallel.ForEach
і що це робить саме?
Будь ласка, не посилайтеся на жодне посилання MSDN.
Ось простий приклад:
string[] lines = File.ReadAllLines(txtProxyListPath.Text);
List<string> list_lines = new List<string>(lines);
foreach (string line in list_lines)
{
//My Stuff
}
Як можна переписати цей приклад Parallel.ForEach
?
Це , можливо, був дан відповідь тут stackoverflow.com/questions/3789998 / ...
—
Ujjwal Manandhar
@UjjwalManandhar Це насправді зовсім інакше, оскільки це запитує про різницю між
—
Рід Копсей
Parallel
класом та використанням PLINQ.
Інші відповіли, як можна переписати. Так що це робить? Він робить "дію" на кожен предмет колекції, як і звичайний
—
Jeppe Stig Nielsen
foreach
. Різниця полягає в тому, що паралельна версія може робити багато "дій" одночасно. У більшості випадків (залежно від того, на якому комп’ютері працює код і наскільки він зайнятий та інші речі) він буде швидшим, і це найголовніша перевага. Зауважте, що ви робите це паралельно, ви не можете знати, в якому порядку обробляються елементи. З звичайним (серійним) foreach
, ви гарантуєте, що lines[0]
спочатку прийде, потім lines[1]
тощо.
@JeppeStigNielsen Це не завжди буде швидше, оскільки є значні накладні витрати, щоб зробити речі паралельними. Це залежить від розміру колекції, яку ви повторюєте, та дії в ній. Правильна річ - це фактично виміряти різницю між використанням Parallel.ForEach () та використанням foreach (). У багато разів нормальний foreach () швидше.
—
Дейв Блек
@DaveBlack Звичайно. Треба буде вимірювати , швидше чи повільніше, у кожному конкретному випадку. Я просто намагався описати паралелізацію взагалі.
—
Джеппе Стіг Нільсен