Process.Start Slow, когда нерести больше новых процессов
-
29-09-2019 - |
Вопрос
Процессы, запущенные через Process.Start
Похоже, около 26-секундной задержки, когда породительный процесс («ребенок») запускает больше новых процессов («внуки») - я пытаюсь найти способ решить эту проблему. В частности, это происходит, когда исходный процесс («Parent») является веб-сайтом ASP.NET или служба Windows (попробовала оба).
Мы пытаемся запустить инструмент командной строки Server-Side для собора информации, создать модификации в файловой системе и продолжить другие процессы, когда «ребенок» закончен. При создании «ребенка» напрямую через командную строку нет задержки, а с определенными параметрами командной строки «ребенок» не вызывает новые процессы, и нет задержки. Однако с другими параметрами «ребенок» порождает «внуки» (то же самое исполняемый как сам, но мы не можем изменить свой код) и, похоже, имеет 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();
}
О, я не думаю, что это имеет значение, поскольку я видел вопрос, ссылающуюся в другом месте (но нет решений), но экзепат, который я использую указывает на Git.exe Mssgit.
Решение
Трудно сказать причину, по которой это может произойти, вам нужно сделать дальнейшее устранение неполадок.
Я бы предположил, чтобы вы использовали проводник процесса и монитор процесса для поиска потенциальных проблем.
Я думаю, что проблема не находится непосредственно в вашем коде, а более связана с окружающей средой пользователя. Например, процесс W3WP.EXE работает в неги-интернет-сессии (сеанс 0), и пользователь может быть не настроен, чтобы иметь веб-доступ (конфигурацию прокси), чтобы вы могли видеть проблему тайм-аута.
Другие советы
У меня была такая же проблема, выполняющая файл .bat, который, в свою очередь, позвонил в Git.cmd, используя Process.Start из службы Windows. Команда GIT будет немедленно, если файл .BAT был запущен непосредственно из командной строки, но задерживается ровно 50 секунд в любое время, когда он был вызван из службы Windows.
Это пришло к проблеме разрешений. После настройки службы Windows для запуска в качестве пользователя (администратор в моем случае) процесс GIT сразу. Возможно, вы можете изменить установщик своего сервиса для запуска службы в качестве «пользователя», но вы можете просто изменить свойства сервисных служб после того, как он установлен к тому же эффекту.
Могут быть способы включить «местные услуги», чтобы обойти задержку, но я бы не знал, как.