C# 使用process.StandardOutput.ReadToEnd()时出现延迟
我正在处理一个时间敏感的问题,执行时间至关重要。但现在我面临一个问题,StandardOutput.ReadToEnd();返回结果需要更多的时间,因此增加了执行时间。这是我代码的一部分。为了显示延迟时间,我在3个地方打印了时间。代码下面提到了时间C# 使用process.StandardOutput.ReadToEnd()时出现延迟,c#,visual-studio,C#,Visual Studio,我正在处理一个时间敏感的问题,执行时间至关重要。但现在我面临一个问题,StandardOutput.ReadToEnd();返回结果需要更多的时间,因此增加了执行时间。这是我代码的一部分。为了显示延迟时间,我在3个地方打印了时间。代码下面提到了时间 tsw.WriteLine("Time 1 :"+DateTime.UtcNow); System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnosti
tsw.WriteLine("Time 1 :"+DateTime.UtcNow);
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);
/*REDIRECTING THE STANDARD INPUT TO Process.StandardOutput StreamReader.*/
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
/*REDIRECTING THE STANDARD INPUT TO Process.StandardOutput StreamReader.*/
/*CREATING A PROCESS, ASSIGN ITS PROCESSINFO AND START IT*/
proc.StartInfo = procStartInfo;
proc.Start();
/*CREATING A PROCESS, ASSIGN ITS PROCESSINFO AND START IT*/
tsw.WriteLine("Time 2 :" + DateTime.UtcNow);
/* GETTING RESULT INTO A STRING*/
result = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
tsw.WriteLine("Time 3 :" + DateTime.UtcNow);
结果是
时间1:1/20/2016上午6:37:57
时间2:2016年1月20日上午6:37:57
时间3:2016年1月20日上午6:38:02
正如我们所看到的,proc.StandardOutput.ReadToEnd();返回并存储在字符串中大约需要5秒钟。这是正常的还是我的代码有问题?非常感谢您的帮助。在打电话给WaitForExit之前,您是否检查过时间?您是否在多台机器上试用过它-不同版本的Windows等?这可能是一个特定于机器的问题。是的,我在WaitForExit之前检查过。但结果仍然是一样的。我们也在不同的系统中进行了检查,但没有变化。您如何知道流的真正末端?发送端总是可以添加更多数据。最好的方法是在消息的开头添加一个字节计数。然后读取字节数直到接收到所有字节,而不是读取结束。在ReadToEnd()之后调用WaitForExit()
是没有意义的;后者在stdout关闭之前不会返回,而在进程退出之前不会返回。就问题本身而言,如果流程需要5秒钟才能结束,那就是流程本身,而不是流程
类。过程需要多长时间完全取决于过程;该关键信息在问题中完全不存在,仅由名为command
的变量表示。如果你需要帮助,请提供一个好的答案。