指定されたディレクトリ内のすべての PDF ファイルに対して外部プログラムを実行する必要があります。
問題は、外部プログラムのプロセス数をユーザー指定の値に制限する方法です。次のように、ループで実行します。
foreach(string file in Directory.GetFiles(sourcePath))
{
Process p = new Process();
p.StartInfo.FileName = @"path\program.exe";
p.StartInfo.Arguments = previouslySetArguments;
p.Start();
}
問題は、非常に大量のファイルが存在する場合があり、そのコードではすべてのプロセスが同時に実行されることです。それは本当にマシンを遅くします。
他のアイデアは、p.WaitForExit();
の後に置くp.Start();
ことですが、一度に1つのプロセスしか実行しないため、作業全体が遅くなります:)
正確な数のプロセスを同時に実行するためにプロセス数を制限する最も簡単な方法は何ですか? ユーザーに判断してもらいたい。
一度に最大5つのプロセスを実行したいとしましょう。つまり:
- 最初の 5 つのプロセスは、ディレクトリ内の最初の 5 つのファイルに対して多かれ少なかれ同時に開始されます
- それらの 1 つ (どちらでも構いません) が作業を終了すると、次のプロセスが開始されます - 次のファイルに対して