0

私は 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() では、ストリーム s2 のデータを生成しているときに、ストリーム s1 に関連付けられているデータの量を気にする必要がありますか? それとも、これは本当に問題ではありませんか?

4

1 に答える 1

2

Stream オブジェクトは、すべての標準出力データですぐに満たされるわけではありません。

プロセスが実行されると、バッファに書き込み、バッファがいっぱいになると、バッファから読み取るまでフリーズします。

バッファから読み取ると、プロセスがより多くのデータを書き出すためのスペースがクリアされます。

于 2013-01-25T00:24:10.957 に答える