RedirectStandardOutput - это буферизация строк, а не мгновенная?

StackOverflow https://stackoverflow.com/questions/237914

  •  04-07-2019
  •  | 
  •  

Вопрос

Хорошо, я пытаюсь использовать Tail для мониторинга файла журнала, но я не могу получить такое же программное поведение, как при ручном запуске его через приглашение cmd с теми же параметрами.

При запуске через приглашение cmd отображаются новые строки мгновенно . Однако с программной точки зрения мне придется подождать около 75+ новых строк в файле журнала, прежде чем «буфер» освободит все строки.

Вот код, который у меня есть сейчас.

private const string tailExecutable = @"C:\tail.exe";
private const string logFile = @"C:\test.log";

private static void ReadStdOut()
{
    var psi = new ProcessStartInfo
    {
        FileName = tailExecutable,
        Arguments = String.Format("-f \"{0}\"", logFile),
        UseShellExecute = false,
        RedirectStandardOutput = true
    };

    // Running same exe -args through cmd.exe 
    // works perfectly, but not programmatically.
    Console.WriteLine("{0} {1}", psi.FileName, psi.Arguments);

    var tail = new Process();
    tail.StartInfo = psi;
    tail.OutputDataReceived += tail_OutputDataReceived;
    tail.Start();
    tail.BeginOutputReadLine();
}

static void tail_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
    Console.WriteLine(e.Data);
}

Я уже использовал событие OutputDataReceived, но у меня никогда не было таких проблем с буферизацией / рассылкой спама.

Я так запутался с этим сейчас.

* Изменить *

Я нашел этот проект wintail в CodeProject и собираюсь переключиться к этому, потому что буфер делает это решение слишком медленным.

Спасибо за ответы.

Это было полезно?

Решение

Process.StandardOutput при перенаправлении по умолчанию использует StreamReader с 4096-байтовым буфером, поэтому ответ - да.

Другие советы

В большинстве языков и операционных систем стандартный поток обычно буферизуется, а поток ошибок - нет.

Попробуйте использовать: <Код>     System.Console.Error

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top