Как отключить буферизацию вывода в Process.StandardOutput

Этот вопрос задавали уже более одного раза, но я не нашел удовлетворительного ответа ни в одном из этих обсуждений.

Я согласен. запуск процесса командной строки, который производит измерения в режиме реального времени для STDOUT, производя новый результат примерно каждую секунду. Использование System.Diagnostics.Process.StandardOutput приводит к совершенно неприемлемой задержке (более 20 секунд), поскольку данные STDOUT работают через буфер 4k в Process.StandardOutput StreamReader, а там нет. Кажется, есть какой-то способ обойти это.

Вызов Process.StandardOutput.BaseStream.Flush () не работает.

Я пробовал выполнять побайтовое синхронное чтение Process.StandardOutput, но я все еще на 4 тыс. отстает от фактического вывода.

Может ли кто-нибудь хотя бы проверить для меня, что можно каким-то образом преодолеть все проблемы с буферизацией, которые у меня возникают при перенаправлении STDOUT, и получить данные в моем приложении, как только это появилось бы в окне оболочки? Могу ли я унаследовать от класса Process и изменить поведение средства чтения потока StandardOutput? Нужно ли мне смотреть на необработанные вызовы WINAPI?

Так или иначе, это должно быть сделано, даже если я в конечном итоге напишу неуправляемый C ++ для запуска задачи и использования вывода и связывания этого. Любая помощь приветствуется; Я на грани своего остроумия ...

Редактировать: Похоже, что мне нужна .Net реализация "ожидаемых" библиотек, доступных для C / C ++, Perl, Python и Java (это единственные, которые я нашел до сих пор). Кто-нибудь знает, существует ли такой зверь?

8
задан Drew Shafer 4 October 2010 в 15:17
поделиться