Parallel.ForEach быстрее обычного foreach? - PullRequest
2 голосов
/ 17 декабря 2010

Интересно, если я поменяю все свои обычные ForEach на Parallel.ForEach, ускорит ли я все итерации или это зависит от ситуации?

Ответы [ 4 ]

3 голосов
/ 17 декабря 2010

Это зависит от того, как связана ваша обработка.Если он связан одним потоком ЦП и у вас есть доступные кратные значения, тогда да, это будет быстрее.Если ваш код ожидает базу данных, то создание нескольких копий может немного увеличиться, если база данных поддерживает хорошие параллельные операции.

Самое важное, что нужно учитывать, - будет ли ваш код работать правильно, если он разделен между потоками илиу вас есть условия гонки, которые могут вызвать проблемы?

3 голосов
/ 17 декабря 2010

Зависит от ситуации.Большинство экземпляров for-each не выполняют вычислительно дорогостоящие действия или блокирующие действия, поэтому затраты на создание задач и назначение потоков слишком велики, чтобы того стоить.все проблемы могут быть распараллелены для повышения производительности.

1 голос
/ 17 декабря 2010

Это будет абсолютно зависеть от ситуации, при выполнении операций с потоками и т. Д. Будет много накладных расходов, поэтому что-то вроде:

foreach(char c in alphabet)
{
  myStr += c;
}

Не выиграет от распараллеливания (среди прочих вопросов).Где-то вроде:

foreach(File f in myLargeLogFiles)
{
   LogFileProcessor p = new LogFileProcess();
   p.ProcessLogFile(f);
}

Может очень выиграть от распараллеливания.Все сводится к тому, насколько тяжелой является нагрузка внутри цикла;преимущество от параллелизма больше, чем от накладных расходов на создание потоков, синхронизацию потоков и т. д.

1 голос
/ 17 декабря 2010

Все зависит от ситуации.Параллельно для каждой будет выполняться несколько итераций одновременно, если это возможно, но бывают случаи, когда это возможно, например, на однопроцессорной машине.

Вы должны быть осторожны, хотя задача, которую вы пытаетесь ускорить, не должна запускаться последовательно.Вам все еще нужно беспокоиться об условиях параллелизма, таких как запись нескольких потоков в один и тот же список и т. Д., Поэтому не всегда рекомендуется использовать его.

...