Я хочу понять ключевые различия между ними, особенно в отношении производительности при работе с большими наборами данных или дорогостоящими вычислениями.
Сценарий 1: без AsParallel()
- Запрос Where выполняется последовательно для коллекции элементов.
- Фильтрация (i => i.Name == currentItem.Name) оценивается по одному элементу за раз.
- Только внешний цикл () выигрывает от параллелизма, при котором currentItem обрабатывается в нескольких потоках.
Код: Выделить всё
Parallel.ForEach()
- Этот подход кажется более простым и отлично работает для небольших наборов данных или облегченных операций LINQ.
Код: Выделить всё
var result = new List();
Parallel.ForEach(items, currentItem =>
{
var filteredItems = items.Where(i => i.Name == currentItem.Name);
result.AddRange(filteredItems);
});
Код: Выделить всё
var result = new List();
Parallel.ForEach(items, currentItem =>
{
var filteredItems = items.AsParallel().Where(i => i.Name == currentItem.Name);
result.AddRange(filteredItems);
});
Подробнее здесь: https://stackoverflow.com/questions/793 ... lel-foreac