是否有缓冲区大小附加到标准输出?

jam*_*lle 11 .net windows buffer stdout

我试图在Windows上找到与stdout相关的数据限制的一些信息.我似乎无法在MSDN上找到相关信息.

  1. 可以将多少数据写入stdout是否有限制?如果是这样,如果达到限制会发生什么?数据丢失了吗?

  2. 如果重定向stdout(例如,通过从.Net启动进程并使用ProcessStartInfo.RedirectStandardOutput属性),这对可以写入多少数据有影响吗?当我从调用过程中的stdout流中读取时,这是否会影响限制?

  3. 这些限制是否与命名管道有关?

Jon*_*eet 19

这取决于它的发展方向 - 但是,如果你在.NET中重定向输出,如果你不读取输出,你很容易遇到问题.当缓冲区用完时,子进程中对stdout的写入将被阻塞.导致死锁的一个常见原因是"父"进程等待"子"退出,然后读取输出 - 如果子进程需要父进程读取输出以释放缓冲区空间,则无法正常工作.

.NET通过允许使用Process.OutputDataReceived和的事件驱动方法使这变得更容易Process.ErrorDataReceived.这意味着您不需要启动两个线程(一个用于读取stdout,一个用于读取stderr)只是为了防止进程阻塞...