2016-03-05 6 views
1

У меня есть список объектов, находящихся в списке. Этот список может иметь как минимум одно или целых 500 записей. У меня также есть поток, который принимает этот список как процесс этих объектов в последовательном порядке.C# многопоточный алгоритм параллелизма

Чтобы ускорить работу, мне нужно разбить этот список на несколько потоков для параллельной обработки и в то же время контролировать, сколько потоков работает одновременно.

Каков наилучший способ разделить этот список и передать меньшие списки в потоки для параллельной обработки и контролировать общее количество активных потоков?

+3

['Parallel.ForEach'] (https://msdn.microsoft.com/en-us/library/dd460720%28v=vs.110%29.aspx) или [' Parallel.For'] (https: //msdn.microsoft.com/en-us/library/dd460713%28v=vs.110%29.aspx)? – cubrr

+0

Как вы контролируете общее количество активных потоков? У вас есть примеры? – user1789782

+1

В приведенных выше ссылках есть примеры. Вы можете контролировать [максимальное количество параллельных задач] (https://msdn.microsoft.com/en-us/library/system.threading.tasks.paralleloptions.maxdegreeofparallelism%28v=vs.110%29.aspx), используя [перегрузка] (https://msdn.microsoft.com/en-us/library/dd781401%28v=vs.110%29.aspx), которая позволяет вам передать экземпляр ['ParallelOptions'] (https://msdn.microsoft.com/en-us/library/system.threading.tasks.paralleloptions%28v=vs.110%29.aspx). – cubrr

ответ

1

Звучит как идеальный случай использования параллельной петли foreach.

По определению:

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

Посмотрите на .NET documentation about Parallel.ForEach и some examples для того, чтобы понять, как это работает.

Смежные вопросы