ParallelEnumerable
ha un membro statico AsParallel
. Se ho un IEnumerable<T>
e voglio usare Parallel.ForEach
vuol dire che dovrei sempre usare AsParallel
?Parallel.ForEach richiede AsParallel()
ad es. Sono entrambi corretti (a parità di condizioni)?
senza AsParallel
:
List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)), f => list.Add(f));
o con AsParallel
?
List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)).AsParallel(), f => list.Add(f));
Hmmm ... Che cosa è esattamente parrallelizing l'enumerazione? o almeno come si può separare questa paralleizzazione dalla delegazione del compito? – dkackman
@dkackman '.AsParallel()' legge la numerazione per l'esecuzione parallela, in particolare la versione parallela di '.SelectMany()' in questo caso. Pensa a un'enumerazione che ha una pesante clausola 'Where' ma senza un ordine, potremmo valutare quella clausola where simultaneamente su quanti più core possibile dando il successivo nell'enumerazione al successivo thread disponibile, rendendolo quasi' n' volte più veloce. Quello che facciamo con quel risultato può anche essere gestito allo stesso modo in seguito, sia in modo sincrono in un thread o diffuso tra i core come disponibile, che è la parte 'Parallel.ForEach' o' .ForAll', ha senso? –
Questo ha senso. Grazie Nick. – dkackman