Question

Les méthodes utilisées sont parallèles Parallel.For et Parallel.ForEach,

fournir en interne d'équilibrage et partitionné leur propre charge pour effectuer mieux?

Si oui et quelles circonstances voulez-vous écrire créer vos propres partitions en utilisant la classe Partitioner pour améliorer les performances?

Était-ce utile?

La solution

Les routines ne ont fourni leurs propres partitions.

Ils sont basés sur des scénarios « typiques », mais peuvent parfois avoir besoin de conseils, en particulier dans des situations inhabituelles.

Par exemple, le partitionnement par défaut pour les implémentations de IEnumerable<T> (qui ne mettent pas en œuvre IList<T>) commencera par un petit groupe par tâche, et se développer lentement en taille. Toutefois, si vous savez que votre IEnumerable<T> va un élément nourrir lentement à un moment, cela entraînera un bloc, comme la classe Parallel sera « attente » sur l'élément suivant jusqu'à ce qu'il reçoive suffisamment d'éléments pour une partition et les horaires il.

En fournissant votre propre partitionneur, vous pouvez éviter cela, et d'obtenir un meilleur débit.

Un autre grand exemple de l'endroit où un partitionneur personnalisé aide est si vous avez de très petites quantités de travail par élément de boucle. Dans ce cas, vous partitionnement et de travailler sur la partition évite une surcharge inutile. Ceci est couvert dans les Comment: Page Speed ??Up petits corps Loop sur MSDN.

scroll top