C# StandardOutput重定向 问题

本文探讨了在使用.NET进程处理大量输出数据时遇到的阻塞问题,并提供了解决方案,包括调整输出重定向配置和利用批处理文件进行数据输出,确保程序在面对大量数据时不陷入阻塞状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  转自:http://bbs.youkuaiyun.com/topics/190051920#new_post     

this.process = new Process();
        this.process.StartInfo.CreateNoWindow = true;
        this.process.StartInfo.UseShellExecute = false;
        this.process.StartInfo.FileName = fileName;
        this.process.StartInfo.RedirectStandardError = false;
        this.process.StartInfo.RedirectStandardInput = true;
        this.process.StartInfo.RedirectStandardOutput = true; 
        this.process.Start(); 
        StreamWriter sw = this.process.StandardInput;
        sw.Write(test);
        sw.Close();
        string output = this.process.StandardOutput.ReadToEnd();
        this.process.WaitForExit();
        this.process.Close();
中间的 test、fileName 等变量是我先前定义好的
现在有个问题是:
当我的输出在1000行的时候是完全正常的
但当输出的行为2000或以上时就阻塞了

也就是当输入过多时
string output = this.process.StandardOutput.ReadToEnd();
程序就会在上面一行阻塞

请大家忙帮
给一个解决方案
不胜感激

补充一下
是输出过多时

就是我知道输出会比较多时(一般是1000行以上)
就会阻塞

我也想过可能是输入太多
我把
        this.process.StartInfo.RedirectStandardOutput = true; 
该成
        this.process.StartInfo.RedirectStandardOutput = false;

无论输入多少测试数据
程序都正常

是不是StandardOutput有大小限制
如果解决
谢谢 

这些我都明白
我说了在数据少的时候运行是正常的
不是完全没有运行

现在还发现一个问题
如果输入超过好几千行
也会出现阻塞

谢谢阿
(再次说下,我已经成功运行了,就是数据输入或输出过多时出现了问题,期待。。。。。。)

 

缓冲区确实是有大小限制的.而且如果缓冲区满了的话,系统会阻塞等待缓冲区排出适当的数据.
解决办法就是在缓冲区还没有满之前,将缓冲区中的数据输出到某个地方.
另外,一个workaround的方法就是通过重定向符号(>, >>这样的符号,通过调用批处理文件来替代.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值