Ich habe eine IEnumerable mit vielen Elementen, die parallel verarbeitet werden müssen. Die Artikel sind nicht CPU-intensiv. Idealerweise sollten diese Elemente gleichzeitig auf 100 Threads oder mehr ausgeführt werden.C# - Parallel Foreach langsame Erstellung der Threads
Ich habe versucht, dies mit Parallel.ForEach() zu tun. Das funktioniert, aber das Problem ist, dass neue Threads zu langsam spawnen. Es dauert eine (zu) lange Zeit bevor die Parallel.Foreach() die 100 Threads erreicht. Ich weiß, dass es eine MaxDegreeOfParallelism -Eigenschaft gibt, aber das ist ein Maximum, nicht minimal.
Gibt es eine Möglichkeit, die foreach sofort auf 100 Threads auszuführen? ThreadPool.SetMinThreads ist etwas, das wir vermeiden möchten, weil es Auswirkungen auf den gesamten Prozess hat.
Gibt es eine Lösung mit einem benutzerdefinierten Partitionierer?
Well 'Parallel.ForEach' verwendet Pool-Thread und so spielt, aber es ist Regeln, so' SetMinThreads' die einzige Option scheint (wenn Sie speziell verwenden 'Parallel.ForEach' wollen). – Evk
Können Sie eine Probe zur Verfügung stellen, die Ihre _Processing_details zeigt. Ist es IO-gebunden/CPU gebunden, ist es Multi-Step-Prozesse .. etc.? – JSteward
Aber, wenn Ihre Aufgaben nicht CPU-intensiv sind (und so - meist IO intensive) - können Sie async \ await in Kombination mit SemaphoreSlim verwenden, um Nebenläufigkeit zu begrenzen, zum Beispiel wie hier http://stackoverflow.com/a/10810730/5311735 (aber benutze Task.Run (warte nicht ...) wie dort). – Evk