Frage

ParallelEnumerable Hat ein statisches Mitglied AsParallel. Wenn ich eine habe IEnumerable<T> und wollen benutzen Parallel.ForEach bedeutet das, dass ich immer verwenden sollte AsParallel?

ZB sind beide richtig (alles andere ist gleich)?

ohne AsParallel:

List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)), f => list.Add(f));

oder mit AsParallel?

List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)).AsParallel(), f => list.Add(f));
War es hilfreich?

Lösung

Es hängt davon ab, was genannt wird, sie sind getrennte Probleme.

.AsParallel() Parallel von der Aufzählung Nicht die Delegation von Aufgaben.

Parallel.ForEach Parallel zu Schleife, Zuweisen von Aufgaben an Arbeitsthreads für jedes Element.

Sofern Ihre Quelle, es sei denn, Sie werden parallel (z. reader.Match(file) ist teuer), sie sind gleich. Zu Ihrer letzten Frage, Jawohl, beide sind auch korrekt.

Außerdem gibt es noch ein weiteres Konstrukt, das Sie sich vielleicht ein wenig ansehen möchten und immer noch einen maximalen Nutzen von Plinq erhalten:

GetFileList().Where(file => reader.Match(file)).ForAll(f => list.Add(f));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top