Process.StandardOutput流是如何存储的?

时间:2013-01-25 00:14:18

标签: c# process stream

我是Streams的新手,我正在尝试编写一个函数来重定向Process的StandardOutput并返回StandardOutput Stream,以便它可以在其他地方使用。当我在方法中返回Process.StandardOutput Stream时,该Stream是如何存储的?它是否只是在消耗之前存在于某个地方?它有最大尺寸吗?

这是我到目前为止的一些示例代码:

    public Stream GetStdOut(string file)
    {
        _process = new Process(file);
        _process.StartInfo.UseShellExecute = false;
        _process.StartInfo.RedirectStandardOutput = true;
        _process.Start();
        return _process.StandardOutput;
    }

    public bool CompareStreams()
    {
        Stream s1 = GetStdOut("somefile.exe");
        Stream s2 = GetStdOut("anotherfile.exe");

        using (StreamReader sr1 = new StreamReader(s1))
        using (StreamReader sr2 = new StreamReader(s2))
        {
            string line_a, line_b;
            while ((line_a = sr1.ReadLine()) != null &&
                   (line_b = sr2.ReadLine()) != null)
            {
                if (line_a != line_b)
                    return false;
            }
            return true;
        }
    }

所以在CompareStreams()中,当我为Stream s2生成数据时,是否需要担心与Stream s1相关的数据量?或者这不重要吗?

1 个答案:

答案 0 :(得分:2)

Stream对象不会立即填满所有标准输出数据。

当进程运行时,它们会写入缓冲区,当缓冲区已满时,它们将冻结,直到您从缓冲区中读取为止。

当您从缓冲区中读取时,会清除进程以写入更多数据的空间。