Поделиться через


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 будет использовать однако много потоков, предоставляемых базовым планировщиком, поэтому изменение MaxDegreeOfParallelism от значения по умолчанию For ограничивает только количество параллельных задач.

Как правило, не нужно изменять этот параметр. Однако вы можете явно задать его в сценариях расширенного использования, например в следующих случаях:

  • Если вы знаете, что определенный алгоритм, который вы используете, не будет масштабироваться за пределами определенного количества ядер. Свойство можно задать, чтобы избежать использования циклов на дополнительных ядрах.

  • При одновременном выполнении нескольких алгоритмов и вы хотите вручную определить, сколько систем может использовать каждый алгоритм. Для каждого можно задать MaxDegreeOfParallelism значение.

  • Если эвристика пула потоков не может определить правильное количество потоков для использования и может в конечном итоге внедрить слишком много потоков. Например, в длительных итерациях текста цикла пул потоков может не определить разницу между разумным прогрессом или взаимоблокировкой или взаимоблокировкой, и может не иметь возможности освободить потоки, добавленные для повышения производительности. В этом случае можно задать свойство, чтобы убедиться, что вы не используете больше, чем разумное количество потоков.

Применяется к