Domanda

ParallelEnumerable ha un AsParallel membro statico. Se ho un IEnumerable<T> e voglio usare Parallel.ForEach vuol implica che io debba sempre utilizzerò AsParallel?

es. Sono entrambi questi corretta (tutto il resto è uguale)?

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));
È stato utile?

Soluzione

Dipende da quello che viene chiamato, sono questioni separate.

.AsParallel() parallelizza enumerazione non delega delle funzioni.

Parallel.ForEach parallelizzata ciclo , l'assegnazione di compiti a thread di lavoro per ogni elemento.

Quindi, a meno che i sorgenti di enumerazione guadagni da diventare parallelo (ad esempio reader.Match(file) è costoso), sono uguali. Alla sua ultima domanda, , entrambi sono anche corretta.

Inoltre, c'è un altro costrutto si consiglia di guardare in che accorcia un po ', ancora ottenere il massimo beneficio di PLINQ:

GetFileList().Where(file => reader.Match(file)).ForAll(f => list.Add(f));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top