zoukankan      html  css  js  c++  java
  • 调用控制台程序的方法以及注意事项

    我们常常用遇到调用第三方库,但是该库文件没有做好内存管理,会发生内存泄露的情况。

    这个时候我们可以在控制台中调用该库,然后在代码中调用控制台程序,以此控制台的来管理内存。

    public class ConsoleMethod
        {
            private static int _time = 10 * 60 * 1000;
            public static string InvokeConsole(string parameter, string programName, string programAddress = null)
            {
                Process cmd = new Process();
                cmd.StartInfo.FileName =programAddress+"\"+programName;
    
                if (!string.IsNullOrEmpty(programAddress))
                {
                    cmd.StartInfo.WorkingDirectory = programAddress;
                }
    
                //将cmd的标准输入和输出全部重定向到.NET的程序里
                cmd.StartInfo.UseShellExecute = false; //此处必须为false否则引发异常
                //cmd.StartInfo.RedirectStandardInput = true; //标准输入
                cmd.StartInfo.RedirectStandardOutput = true; //标准输出
                cmd.StartInfo.Arguments = parameter; //参数以空格分隔,如果某个参数为空,可以传入””
    
                //不显示命令行窗口界面
                cmd.StartInfo.CreateNoWindow = true;
                cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                cmd.Start(); //启动进程
    
                //获取输出
                //需要说明的:此处是指明开始获取,要获取的内容,
                //只有等进程退出后才能真正拿到
                StreamReader streamR = cmd.StandardOutput;
                string result = string.Empty;
                Task.Run(() =>  // 采用异步,读取调用控制台输出结果
                {
                    result = cmd.StandardOutput.ReadToEnd();
                });
                bool res = cmd.WaitForExit(_time);//等待控制台程序执行完成
                if (!res)
                {
                    cmd.Kill();
                    cmd.Dispose();
                    return result;
                }
                cmd.Close();//关闭该进程
                cmd.Dispose();//关闭该进程
                return result;
            }
        }

      


    控制台应用,有两个地方需要注意:
    1.为防止 调用程序 crash 造成线程死锁,需要关闭 werfalut。 如何禁用 werfault
    2.为防止输出过大,造成死锁,需要采用异步



  • 相关阅读:
    Nginx 配置指令的执行顺序(一)
    缘起 --转
    Nginx 变量漫谈(八)
    Nginx 变量漫谈(七)
    Nginx 变量漫谈(六)
    Windows批量添加防火墙例外端口
    Neo4j 的一些使用心得
    一文教你用 Neo4j 快速构建明星关系图谱
    GemFire 入门篇1:GemFire 是什么?
    数据结构(逻辑结构,物理结构,特点)
  • 原文地址:https://www.cnblogs.com/yaolin1228/p/9063193.html
Copyright © 2011-2022 走看看