Domanda

Ho un ragionevole numero di record in una tabella Azure che sto cercando di fare un po 'la crittografia dei dati una volta su. Ho pensato che avrei potuto accelerare le cose utilizzando un Parallel.ForEach. Anche perché ci sono più di 1K dischi e non voglio pasticciare con me stesso continuazione gettoni sto usando un CloudTableQuery per ottenere il mio enumerator.

Il mio problema è che alcuni dei miei dischi sono stati doppio criptato e mi sono reso conto che io non sono sicuro di come thread-safe l'enumeratore restituito da CloudTableQuery.Execute() è. Ha chiunque altro là fuori ha avuto alcuna esperienza con questa combinazione?

È stato utile?

Soluzione 2

Nonostante i miei sforzi sono stato in grado di replicare il mio problema originale. La mia conclusione è quindi che è perfettamente OK per utilizzare i loop Parallel.ForEach con CloudTableQuery.Execute().

Altri suggerimenti

sarei pronto a scommettere la risposta a Execute ritorno un'implementazione IEnumerator thread-safe è altamente improbabile. Detto questo, questo suona come un altro caso per il modello produttore-consumatore .

Nel vostro scenario specifico che avrebbe il thread originale che ha chiamato Esegui leggere i risultati fuori sequenza e li roba in un BlockingCollection<T> . Prima di iniziare a fare questo, però, si desidera avviare un Task separato che controlla il consumo di tali elementi utilizzando Parallel::ForEach. Ora, probabilmente anche voler guardare in utilizzando il metodo GetConsumingPartitioner della biblioteca ParallelExtensions al fine di essere più efficiente in quanto il sistema di partizionamento di default creerà più in alto di quanto si vuole in questo caso. Si può leggere di più su questo da questo post del blog .

Un ulteriore bonus di utilizzare BlockingCollection<T> nel corso di un ConcurrentQueueu<T> cruda è che offre la possibilità di set limiti che può aiutare a bloccare il produttore di aggiungere altri elementi al di raccolta rispetto ai consumatori possono tenere il passo con. Sarà ovviamente necessario fare qualche test di performance per trovare il punto dolce per la vostra applicazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top