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

  • 写入标准输出的数据量有限制吗?如果是这样,如果达到限制会发生什么?数据丢失了吗?
  • 如果标准输出被重定向(例如,通过从 .Net 启动进程并使用 ProcessStartInfo.RedirectStandardOutput 属性),这对可以写入的数据量有任何影响吗?当我从调用过程中的 stdout 流中读取时,这会影响限制吗?
  • 这些限制是否与命名管道有关?
  • 最佳答案

    这取决于它的去向 - 但是是的,如果您在 .NET 中重定向输出,如果您不读取输出,很容易遇到问题。当缓冲区用完时,写入子进程中的 stdout 将被阻塞。死锁的一个常见原因是“父”进程等待“子”退出,然后读取输出 - 如果子需要父读取输出以释放缓冲区空间,这将不起作用。

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

    关于.net - 是否有附加到标准输出的缓冲区大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2066242/

    10-17 02:09