Процедуры обеспечивали свое собственное разделение.
Они основаны на "типичных" сценариях, но иногда могут требовать руководства, особенно в необычных ситуациях.
Например, разделение по умолчаниюРеализации IEnumerable<T>
(которые не реализуют IList<T>
) будут начинаться с небольшой группы для каждой задачи и медленно увеличиваться в размере.Однако, если вы знаете, что ваш IEnumerable<T>
будет медленно кормить по одному элементу за раз, это вызовет блокировку, так как класс Parallel
будет "ждать" следующего элемента, пока не получит достаточно элементов для раздела и расписаний.it.
Предоставляя свой собственный разделитель, вы можете предотвратить это и повысить пропускную способность.
Еще один отличный пример того, как помогает пользовательский разделитель, - если у вас очень мало работы за циклвещь.В этом случае разделение себя и работа над разделом позволяет избежать ненужных накладных расходов.Это описано на странице Как: ускорить работу небольших петлевых тел на MSDN.