Question

J'ai un nombre raisonnable d'enregistrements dans une table Azure que je tente de faire un cryptage des données une seule fois sur. Je pensais que je pouvais accélérer les choses en utilisant un Parallel.ForEach. Aussi parce qu'il ya plus de 1K dossiers et je ne veux pas mess avec moi-même suite jetons J'utilise un CloudTableQuery pour obtenir mon recenseur.

Mon problème est que certains de mes dossiers ont été doublement crypté et je réalisais que je ne suis pas sûr de savoir comment le thread-safe recenseur retourné par CloudTableQuery.Execute() est. Quelqu'un at-il d'autre là-bas avait une expérience avec cette combinaison?

Était-ce utile?

La solution 2

Malgré mes efforts, j'ai été incapable de reproduire mon problème d'origine. Ma conclusion est donc qu'il est parfaitement acceptable d'utiliser des boucles de Parallel.ForEach avec CloudTableQuery.Execute().

Autres conseils

Je serais prêt à parier la réponse à exécuter revenir une implémentation IEnumerator thread-safe est hautement improbable. Cela dit, cela sonne comme un autre cas pour le modèle producteur-consommateur .

Dans votre scénario spécifique j'aurais le fil original appelé Exécuter lire les résultats de manière séquentielle et d'autres choses les en BlockingCollection<T> . Avant de commencer à le faire si vous voulez commencer une Task séparée qui contrôlera la consommation de ces éléments à l'aide Parallel::ForEach. Maintenant, vous voudrez probablement aussi regarder en utilisant la méthode de GetConsumingPartitioner de la bibliothèque ParallelExtensions afin d'être le plus efficace depuis le partitionneur par défaut créera plus de frais généraux que vous voulez dans ce cas. Vous pouvez en savoir plus sur ce billet depuis ce blog .

Un bonus supplémentaire d'utiliser BlockingCollection<T> sur une ConcurrentQueueu<T> première est qu'il offre la possibilité de bornes fixes qui peuvent aider à bloquer le producteur d'ajouter d'autres éléments à la collection que les consommateurs peuvent suivre. Vous aurez bien besoin de cours pour faire des tests pour trouver la performance le sweet spot pour votre application.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top