0

我是 Streams 的新手,我正在尝试编写一个函数来重定向进程的 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 相关联?或者这真的不重要吗?

4

1 回答 1

2

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

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

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

于 2013-01-25T00:24:10.957 回答