多次执行命令行工具的"MOST"有效方法是什么?

Non*_*one 1 c# performance cmd

当您搜索执行命令行工具或命令提示符的方法时,您会发现太多结果,如此问题,此问题本文.它们都包含完全相同问题的解决方案.但是,我目前正在开发的程序必须执行命令行工具近500次.当我执行以下操作时:

for (int i = 0; i < 500; i++)
{
    Process.Start("cmd","My Input: " + i);
}
Run Code Online (Sandbox Code Playgroud)

计算机停止响应一段时间,因为同时打开了太多程序.

当我执行以下操作时:

for (int i = 0; i < 500; i++)
{
    Process.Start("cmd","My Input: " + i);
    System.Threading.Thread.Sleep(myInterval);
}
Run Code Online (Sandbox Code Playgroud)

该程序花费了太多时间来完成工作(如果我的程序在执行这些命令时挂起,我没有问题).

从我的观点来看,所有这一切发生的主要原因是我每次运行工具时都会打开另一个cmd窗口.我可以保持一个单独的cmd窗口打开并继续提供命令直到我完成了吗?有没有更有效的方法呢?

Evk*_*Evk 5

如果你可以并行运行你的命令,我会这样做:

Parallel.For(0, 500, new ParallelOptions() {MaxDegreeOfParallelism = 8}, i => {
    var process = Process.Start("cmd", "My Input: " + i);
    process.WaitForExit();
});
Run Code Online (Sandbox Code Playgroud)

因此,您可以并行运行命令,但同时运行的命令不超过8个,并等待命令进程退出,直到启动新命令.

对性能也有帮助的是使用UseShellExecuteCreateNoWindow标志,如下所示:

Parallel.For(0, 500, new ParallelOptions() {MaxDegreeOfParallelism = 8}, i => {
    var process = Process.Start(new ProcessStartInfo("cmd", "My Input: " + i) {
        CreateNoWindow = true,
        UseShellExecute = false 
    });
    process.WaitForExit();
});
Run Code Online (Sandbox Code Playgroud)

这可能会或可能不会按预期工作,具体取决于您正在执行的进程类型.如果你只是执行一些.exe应用程序,这应该工作正常,不创建窗口.

我认为你的"cmd"只是你想要执行的应用程序的名称.但是,正如评论中所述,如果您的意思是cmd.exe应用程序 - 很可能您不需要执行它.相反,只需执行您的应用程序本身,而不使用cmd.exe.