2010-08-10 14 views
3

Je comprends l'utilisation d'un itérateur ++ dans Parallel.ForEach n'est pas une bonne option mais maintenant je suis obligé d'utiliser un compteur dans une boucle Parallel.ForEach, le compteur est utilisé pour récupérer les noms de colonne d'un objet dynamique à l'exécution.Toute suggestion quelle serait la meilleure option? .J'ai lu quelque part à StackOverflow que l'utilisation de "Interlocked" est encore une mauvaise conception à l'intérieur de Parallel.ForEach.Counter ++ dans Parallel.ForEach

+0

Pourriez-vous fournir un peu plus de détails sur les raisons pour lesquelles vous avez besoin d'un comptoir? Si vous faites simplement une itération sur les colonnes d'un objet dynamique, à moins que vous n'attendiez une quantité massive de colonnes, je pense que la parallélisation n'est peut-être pas la meilleure approche. –

+0

Vous avez raison Ryan mais j'essayais juste ma chance si je peux utiliser Parallel.ForEach.Le seul bloc que je sens est le compteur sinon la "tâche" est propre et n'a aucune dépendance sur d'autres objets. – Princeton

Répondre

1

Si vous avez vraiment besoin d'un traitement parallèle, les indices devront être précalculés. Quelque chose comme Enumerable.Range(0, cols.Length).ToArray(). Dans le cas contraire, chaque colonne dépendra de la précédente, ce qui ne va évidemment pas de pair.

+0

Il ne peut pas être pré-calculé.Il s'agit d'une itération de ligne-colonne.Grâce à l'itération j'ai besoin d'analyser chaque colonne pour une vérification et en fonction de ce résultat, je vais devoir poinçonner la valeur de la colonne.Ainsi, le compteur dépend du résultat de la vérification de la cellule intermédiaire. – Princeton

+0

La seule valeur qui peut être pré-calculée est le nombre de colonnes max et une autre vérification est de voir si mon compteur dépasse le nombre de colonnes. Je ne peux pas afficher le code car je fais référence à de nombreuses autres interfaces. – Princeton

Questions connexes