C#:winform 程序中使用线程调用外部子进程,子进程运行过慢的问题

问题:

在 winform 程序中使用多线程调用多个外部子进程,并将子进程的输出截取到 winform 窗口中,         

发现外部子进程运行速度过慢。


排查:

1、单独运行子进程时间为 3 分钟;

2、使用 winform 程序调用线程启动外部子进程时间为 26 分钟;


分析:

1、多个子进程同时对 A.txt 文件进行读操作;     

2、多个子进程同时对 B.txt 文件进行写操作;

3、子进程有较多输出;         

4、为防止 winform 窗口主线程卡死,每次读取一行截取输出流调用 Thread.Sleep(10); 降低线程调用;


尝试:

1、读操作的时候未对该文件进行写操作,同时读无问题;

2、同时对 B.txt 进行写可能有可能是问题出现的原因;

3& 4、 结合一起分析,若有 10000 行输出,每次等待 0.01 秒,总时间花费时间大概多出 100 秒,子进程输出超过10000 行,则大概每输出 6000 行,导致子进程多花费 1 分钟时间;


针对2尝试修改:

写操作全部注释,再次运行,效果不明显,非主要问题;


针对3&4尝试修改:

将 "Thread.Sleep(10); "改为 "Thread.Sleep(0);  ";

将多线程其他子线程截取的输出流改为只显示当前选择 page 的输出流,防止主线程被卡死;

再次运行,时间降为4-5分钟,问题解决;


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值