代码之家  ›  专栏  ›  技术社区  ›  Matt DeKrey Kiran

进程。在生成更多新进程时开始变慢

  •  0
  • Matt DeKrey Kiran  · 技术社区  · 14 年前

    通过以下方式启动的进程 Process.Start 当衍生进程(“子进程”)启动更多新进程(“孙进程”)时,似乎有26秒左右的延迟-我正在尝试找到解决此问题的方法。具体来说,当原始进程(“父进程”)是ASP.NET网站或Windows服务(两者都尝试)时,就会发生这种情况。

    我们试图运行服务器端的命令行工具来收集信息,在文件系统中进行修改,并在“子”完成后继续其他进程。当通过命令行直接创建“子”时,没有延迟,并且对于某些命令行参数,“子”不会生成新进程,也没有延迟。但是,对于其他参数,“child”会产生“孙子”(与自身相同的可执行文件,但我们无法修改其代码),并且在第一个进程启动之前似乎有25-30秒(通常为26秒)的延迟,然后正常运行。

    我试过修改 UseShellExecute 属性 CreateNoWindow 财产,以及 WindowStyle 属性,无效。 ErrorDialog 以及 RedirectStandard* 属性为假。

    我使用的代码如下:

    using (Process p = new Process())
    {
        p.StartInfo = new ProcessStartInfo(exePath, args)
        {
            WorkingDirectory = workingDirectory,
            UseShellExecute = true,
            CreateNoWindow = true,
        };
        p.Start();
        p.WaitForExit();
    }
    

    哦,我不认为这很重要,因为我在别处看到了这个问题(但没有解决方案),但是我使用的exepath指向msysgit的git.exe。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Dirk Vollmar    14 年前

    很难说这可能发生的原因,您需要做进一步的故障排除。

    我建议您使用ProcessExplorer和ProcessMonitor来查找潜在的问题。

    我想问题不直接在您的代码中,而是与用户的环境有关。例如,w3wp.exe进程在非GUI会话(会话0)中运行,用户可能没有配置为具有Web访问(代理配置),因此您可能会在此处看到超时问题。

        2
  •  2
  •   hspain    14 年前

    我在执行一个.bat文件时遇到了同样的问题,该文件使用process.start从Windows服务调用git.cmd。如果直接从命令行运行.bat文件,则git命令将立即执行,但每次从Windows服务调用它时,它都会延迟50秒。

    这归结为权限问题。在将我的Windows服务配置为以用户身份运行(在我的例子中是管理员)之后,git进程立即运行。您可能可以修改服务安装程序以“用户”身份运行该服务,但您只需在安装服务后修改服务属性,以达到相同的效果。

    可能有一些方法可以让“本地服务”绕过延迟,但我不知道怎么做。