问题:
在 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分钟,问题解决;