c# – 过程输出捕获非常慢

我目前正在运行以下代码,以测试外部应用程序是否实际上正在使用我的一个dll(更新程序代码)

 ProcessStartInfo psi = new ProcessStartInfo()
 {
      FileName = "Tasklist.exe",
      Arguments = @"/m MyServices.dll",
      CreateNoWindow = true,
      RedirectStandardOutput = true,
      UseShellExecute = false
 };
 Process p = new Process();
 p.StartInfo = psi;
 p.Start();
 //debug output box, just to see everything that returns
 txtOutput.Text = p.StandardOutput.ReadToEnd();
 p.WaitForExit();
 Refresh();

 if (txtOutput.Text.Contains("TestProgram.exe"))
      MessageBox.Show("Found It");

现在,这段代码工作!!! ….但它的STUPID很慢.我可以在cmd窗口中键入相同的命令,并在十分之一秒内得到响应,但由于某种原因,该行上的停顿p.StandardOutput.ReadToEnd()占用1到5分钟!

而现在的实际问题是:

有谁知道为什么会这么慢?或者可能如何解决它并使其快速可接受?

更新:更多数据

如果我使用shell窗口并且实际上没有捕获输出,我可以在shell窗口中观察任务运行.它的运行速度很快(非常小),但在输出开始出现在shell窗口之前仍然需要一分钟.不知道它在做什么.

最佳答案 StreamReader.ReadToEnd将阻塞,直到读取所有数据.尝试使用
Process.OutputDataReceived活动.

Process p = new Process();
p.StartInfo = psi;
p.OutputDataReceived += OutputHandler;
p.Start();

p.BeginOutputReadLine();

p.WaitForExit();
p.OutputDataReceived -= OutputHandler;

private void OutputHandler(object sender, DataReceivedEventArgs outLine)
{
    txtOutput.Text += outLine.Data;
}
点赞