Каковы последствия для производительности использования AsParallel() с Parallel.ForEach() в запросах LINQ?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Каковы последствия для производительности использования AsParallel() с Parallel.ForEach() в запросах LINQ?

Сообщение Anonymous »

Чтобы оптимизировать производительность приложения C#, я столкнулся с AsParallel() в LINQ.
Я хочу понять ключевые различия между ними, особенно в отношении производительности при работе с большими наборами данных или дорогостоящими вычислениями.

Сценарий 1: без AsParallel()
  • Запрос Where выполняется последовательно для коллекции элементов.
  • Фильтрация (i => i.Name == currentItem.Name) оценивается по одному элементу за раз.
  • Только внешний цикл (

    Код: Выделить всё

    Parallel.ForEach()
    ) выигрывает от параллелизма, при котором currentItem обрабатывается в нескольких потоках.
  • Этот подход кажется более простым и отлично работает для небольших наборов данных или облегченных операций LINQ.

Код: Выделить всё

var result = new List();

Parallel.ForEach(items, currentItem =>
{
var filteredItems = items.Where(i => i.Name == currentItem.Name);
result.AddRange(filteredItems);
});
Сценарий 2: с использованием AsParallel()

Код: Выделить всё

var result = new List();

Parallel.ForEach(items, currentItem =>
{
var filteredItems = items.AsParallel().Where(i => i.Name == currentItem.Name);
result.AddRange(filteredItems);
});

Мне интересно, не может ли использование AsParallel() во внутреннем запросе LINQ (часть .Where()) привести к слишком большим накладным расходам или сложности, что приведет к это контрпродуктивно для определенных рабочих нагрузок. Можете ли вы дать несколько советов о том, когда имеет смысл использовать AsParallel() как для внешних, так и для внутренних операций, а когда это действительно может замедлить работу?

Подробнее здесь: https://stackoverflow.com/questions/793 ... lel-foreac
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»