Hallo,
ich habe eine Konsolenanwendung, deren Aufruf aktuell durch Erstellen von ProcessStartInfo und Process.Start() sequentiell in einer Schleife abgearbeitet wird.
Ich möchte diese Aufrufe der Konsolenanwendung gerne Parallelisieren, so dass alle Kerne mit Arbeit versorgt werden.
Kann ich die vorhandenen Aufrufe mittels ProcessStartInfo und Process.Start() einfach in ein Parallel.ForEach packen, wie im folgenden Schnipsel?
public static void ExecuteParallel(List<ProcessStartInfo> processStartInfoCollection)
{
Parallel.ForEach(processStartInfoCollection, processStartInfo =>
{
using (Process process = Process.Start(processStartInfo))
{
process.WaitForExit();
}
});
}
Wieso probierst Du es nicht einfach?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ich sage mal so,
was mach denn die ConsoleApp?
Vielleicht lässt sich ja besser die Funktionalität darin parallelisieren !
@Abt: Ich hatte es probiert, bevor ich hier gefragt habe. Es scheint zu funktionieren. Aber muss ich noch was beachten?
@trashkid2000: Die Konsolenanwendung konvertiert von einem Datenformat in ein anderes. Da die Konsolenanwendung nicht von mir ist, ist es auch ausgeschlossen, die Funktionalität darin zu parallelisieren!
@Aber muss ich noch was beachten?
Dann stell Deine Frage auch so und nicht "funktioniert das?".
Weil ob etwas funktioniert kannste einfach ausprobieren - das müssen ja wir nicht für Dich tun.
Parallelisierung brauchst Du hier nur, weil Du ein WaitForExit benutzt.
Ansonsten bräcuhtest Du es nicht - und nein; normalerweise gibts nichts genaues zu beachten.
Gilt aber natürlich niemals pauschal, weil es auch auf den Prozess ankommt, den man ausführt.
Ganz logisch.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code