Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用process.StandardOutput.ReadToEnd()时出现延迟_C#_Visual Studio - Fatal编程技术网

C# 使用process.StandardOutput.ReadToEnd()时出现延迟

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

我正在处理一个时间敏感的问题,执行时间至关重要。但现在我面临一个问题,StandardOutput.ReadToEnd();返回结果需要更多的时间,因此增加了执行时间。这是我代码的一部分。为了显示延迟时间,我在3个地方打印了时间。代码下面提到了时间

 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
的变量表示。如果你需要帮助,请提供一个好的答案。