Redirect Standard Output Efficiently in .NET

前端 未结 3 1261
旧时难觅i
旧时难觅i 2020-12-03 12:09

I am trying to call php-cgi.exe from a .NET program. I use RedirectStandardOutput to get the output back as a stream but the whole thing is very slow.

Do you have an

相关标签:
3条回答
  • 2020-12-03 12:43

    The problem is due a bad php.ini config. I had the same problem and i downloaded the Windows installer from: http://windows.php.net/download/.

    After that and commenting out not needed extensions, the conversion process is alà Speedy Gonzales, converting 20 php per second.

    You can safely use "oProcess.StandardOutput.ReadToEnd()". It's more readable and alomost as fast as using the thread solution. To use the thread solution in conjunction with a string you need to introduce an event or something.

    Cheers

    0 讨论(0)
  • 2020-12-03 12:57

    You can use the OutputDataReceived event to receive data as it's pumped to StdOut.

    0 讨论(0)
  • 2020-12-03 12:59

    The best solution I have found is:

    private void Redirect(StreamReader input, TextBox output)
    {
        new Thread(a =>
        {
            var buffer = new char[1];
            while (input.Read(buffer, 0, 1) > 0)
            {
                output.Dispatcher.Invoke(new Action(delegate
                {
                    output.Text += new string(buffer);
                }));
            };
        }).Start();
    }
    
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        process = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                CreateNoWindow = true,
                FileName = "php-cgi.exe",
                RedirectStandardOutput = true,
                UseShellExecute = false,
                WorkingDirectory = @"C:\Program Files\Application\php",
            }
        };
        if (process.Start())
        {
            Redirect(process.StandardOutput, textBox1);
        }
    }
    
    0 讨论(0)
提交回复
热议问题