Process.Start在产生更多新进程时开始变慢

时间:2010-08-18 15:36:12

标签: c# iis windows-services process.start

当生成的进程(“子”)启动更多新进程(“孙子”)时,通过Process.Start启动的进程似乎有大约26秒的延迟 - 我正试图找到一种方法解决这个问题。具体来说,这是在原始进程(“父”)是ASP.Net网站或Windows服务(两者都试过)时发生的。

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

我尝试修改UseShellExecute属性,CreateNoWindow属性和WindowStyle属性,但不起作用。 ErrorDialogRedirectStandard*属性均为false。

我正在使用的代码如下:

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 个答案:

答案 0 :(得分:2)

我在执行.bat文件时遇到同样的问题,然后使用来自Windows服务的Process.Start调用git.cmd。如果直接从命令行运行.bat文件,git命令会立即执行,但是只要从Windows服务调用它就会延迟50秒。

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

可能有办法启用“本地服务”来解决延迟,但我不知道如何。

答案 1 :(得分:1)

很难说明可能发生这种情况的原因,您需要进行进一步的故障排除。

我建议你使用Process Explorer和Process Monitor来寻找潜在的问题。

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