Если вам действительно нужно обработать каждый элемент в списке b для каждого элемента в списке a, тогда потребуется время, пропорциональное a.Count * b.Count
.Вы ничего не можете сделать, чтобы предотвратить это.Добавление параллельной обработки даст вам линейное ускорение, но это не повлияет на время обработки, если списки даже достаточно велики.
Насколько велики эти списки?Вам действительно нужно проверять каждую комбинацию a
и b
?Можете ли вы дать нам больше информации о проблеме, которую вы пытаетесь решить?Я подозреваю, что есть способ применить более эффективный алгоритм, который уменьшит ваше время обработки на порядки.
Изменить после публикации дополнительной информации
IЗнайте, что приведенный вами пример - всего лишь пример, но он показывает, что вы можете найти лучший алгоритм по крайней мере для некоторых ваших случаев.В этом конкретном примере вы можете отсортировать a
и b
по имени, а затем выполнить прямое слияние.Или вы можете отсортировать b
в массив или список и использовать двоичный поиск для поиска имен.Любой из этих двух вариантов будет работать намного лучше, чем ваши вложенные циклы.Фактически, намного лучше, так что вам, вероятно, не придется беспокоиться о распараллеливании.
Посмотрите на числа.Если ваш a
содержит 4000 элементов, а b
содержит 100 000 элементов, ваш вложенный цикл выполнит 400 миллионов сравнений (a.Count * b.Count
).Но сортировка составляет всего n log n
, а слияние является линейным.Таким образом, сортировка и последующее слияние будут примерно (a.Count * 12) + (b.Count * 17) + a.Count + b.Count
или около 2 миллионов сравнений.Это примерно в 200 раз быстрее.
Сравните это с тем, что вы можете сделать с параллельной обработкой: только линейное ускорение.Если у вас четыре ядра и вы получаете линейное ускорение, вы сократите время только в четыре раза.Более качественный алгоритм сокращает время в 200 раз с помощью одного потока.
Вам просто нужно найти лучшие алгоритмы.
LINQ также может обеспечить хорошее решение.Я не эксперт по LINQ, но, похоже, он сможет быстро справиться с чем-то вроде этого.