我有一个产生的进程,它向stdout喷出大约3MB /秒。我想捕获所有这些数据。 .NET Process.Start
具有RedirectStandardOutput
属性,用于创建附加到stdout文件句柄的FileStream
对象。它创建FileStream
,缓冲区大小为4096字节。这对我的需求来说太微不足道了。当我可以启动后台线程来读取重定向的stdout时,我已经错过了几百千字节的数据。有没有办法解决?这是我的代码:
var psi = new ProcessStartInfo
{
Arguments = CreateArgs(@"..."),
CreateNoWindow = true,
FileName = @"...",
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
WorkingDirectory = @"...",
};
var process = new Process{StartInfo = psi, EnableRaisingEvents = true };
process.ErrorDataReceived += (sender, args) => Dispatcher.Invoke(() => _stderr.AppendText(args.Data)); // log this
process.Start();
Task.Run(() =>
{
var buffer = new byte[size];
using (var reader = new BinaryReader( ((FileStream)process.StandardOutput.BaseStream).))
{
while (!process.HasExited)
{
reader.Read(buffer, 0, buffer.Length);
...