ParallelOptions.MaxDegreeOfParallelism Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Получает или задает максимальное число параллельных задач, допускаемое этим экземпляром ParallelOptions.
public:
property int MaxDegreeOfParallelism { int get(); void set(int value); };
public int MaxDegreeOfParallelism { get; set; }
member this.MaxDegreeOfParallelism : int with get, set
Public Property MaxDegreeOfParallelism As Integer
Значение свойства
Целое число, представляющее максимальную степень параллелизма.
Исключения
Свойство устанавливается равным нулю или значению, которое меньше -1.
Комментарии
Свойство MaxDegreeOfParallelism влияет на количество параллельных операций, выполняемых вызовами Parallel методов, которые передаются этому экземпляру ParallelOptions . Положительное значение свойства ограничивает число параллельных операций до заданного значения. Если значение равно -1, количество одновременно выполняемых операций не ограничено (за исключением ForEachAsync метода , где -1 означает ProcessorCount).
По умолчанию и ForEach будет использовать множество потоков, For предоставляемых базовым планировщиком, поэтому изменение MaxDegreeOfParallelism по умолчанию ограничивает только количество параллельных задач.
Как правило, изменять этот параметр не требуется. Однако вы можете явно задать его в расширенных сценариях использования, таких как:
Если вы знаете, что определенный алгоритм, который вы используете, не будет масштабироваться за пределами определенного количества ядер. Свойство можно задать, чтобы избежать лишних циклов на дополнительные ядра.
Если вы выполняете несколько алгоритмов одновременно и хотите вручную определить, какую часть системы может использовать каждый алгоритм. Для каждого из них можно задать MaxDegreeOfParallelism значение.
Когда эвристика пула потоков не может определить правильное количество потоков для использования и может в конечном итоге внедрить слишком много потоков. Например, в длительных итерациях тела цикла пул потоков может не определить разницу между разумным прогрессом, динамическим блоком или взаимоблокировкой, а также может не иметь возможности восстановить потоки, добавленные для повышения производительности. В этом случае можно задать свойство , чтобы не использовать более разумного количества потоков.