Search code examples
c#.netstreamreader

C# System.Diagnostics.Process redirecting Standard Out for large amounts of data


I running an exe from a .NET app and trying to redirect standard out to a streamreader. The problem is that when I do

myprocess.exe >> out.txt

out.txt is close to 14mb. When I do the command line version it is very fast but when I run the process from my csharp app it is excruciatingly slow because I believe the default streamreader flushes every 4096 bytes.

Is there a way to change the default stream reader for the Process object?


Solution

  • I haven't tried, but it looks like the asynchronous methods may offer better performance. Instead of using process.StandardOutput, try this method instead:

    Process process = Process
        .Start(new ProcessStartInfo("a.exe"){RedirectStandardOutput = true});
    if (process != null)
    {
        process.OutputDataReceived += ((sender, e) =>
                                       {
                                           string consoleLine = e.Data;
                                           //handle data
                                       });
        process.BeginOutputReadLine();
    }