2010-08-18 3 views
0

Process.Start을 통해 시작된 프로세스는 생성 된 프로세스 ("자식")가 더 많은 새 프로세스 ("손자")를 시작할 때 약 26 초 지연되는 것으로 보입니다. 이 문제를 해결할 수있는 방법을 찾으십시오. 특히 원본 프로세스 ("부모")가 ASP.Net 웹 사이트 또는 Windows 서비스 (둘 모두 시도) 인 경우이 문제가 발생합니다.더 많은 새 프로세스를 생성 할 때 Process.Start가 느림

정보를 수집하고 파일 시스템을 수정하고 "자식"이 완료되면 다른 프로세스를 계속 진행하기 위해 서버 측 명령 줄 도구를 실행하려고합니다. 명령 줄을 통해 "자식"을 직접 만들면 지연이없고 특정 명령 줄 매개 변수로 "자식"이 새 프로세스를 생성하지 않고 지연이 없습니다. 그러나 다른 매개 변수를 사용하면 "자식"이 "손주"(동일한 실행 파일 자체이지만 코드를 수정할 수 없음)를 생성하고 첫 번째 프로세스가 완료되기 전에 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 I :

는 다음과 내가 사용하는 코드가 될 때 mysysgit의 git.exe에 포인트를 사용합니다.

+0

그랜드 아이들 프로세스? 이 모든 기능을 피하기 위해이 기능을 구현할 수있는 프레임 워크에 기본 제공 클래스가 없습니까? –

+0

불행히도, 우리가 제어 할 수없는 exe를 시작하고 자체 프로세스를 시작하려고하거나이 문제가 발생하지 않을 것입니다. –

+0

확인할 수있는 또 다른 사항 : 코드를 명령 줄 응용 프로그램에 넣고 호출하면 속도가 느려 집니까? –

답변

1

왜 이런 일이 일어날 지 이유를 설명하기가 어려울 경우 추가 문제 해결을 수행해야합니다.

잠재적 인 문제를 찾기 위해 프로세스 탐색기와 프로세스 모니터를 사용하는 것이 좋습니다.

나는 문제가 직접 코드에있는 것이 아니라 사용자의 환경과 더 관련이 있다고 생각합니다. 예를 들어, w3wp.exe 프로세스가 비 GUI 세션 (세션 0)에서 실행되고 사용자가 웹 액세스 (프록시 구성)를 구성하지 못하여 여기에서 시간 초과 문제가 발생할 수 있습니다.

+0

이상한 점은 실제로 짧은 시간 후에 해결된다는 것입니다. 프로세스 모니터는 좋은 제안입니다. 나는 무엇이 진행되고 있고, 더 많은 정보를 가지고 다시 게시 할 것입니다. –

+0

프로세스 모니터가 필요했습니다. 문제는 serverfault에서 더 적절하게 요청되는 문제였습니다. 오래 전에 도와 줘서 고마워. –

+0

우리 시스템 관리자가 프로세스 모니터의 정보 덕분에 마침내 문제가 해결되었습니다. hspain이 말했듯이 권한 문제가 발생했습니다. 이제 자식은 1 초 이내에 반응합니다! –

2

Windows 서비스에서 Process.Start를 사용하여 git.cmd를 호출 한 .bat 파일을 실행하는 것과 똑같은 문제가 발생했습니다. .bat 파일이 명령 행에서 직접 실행되었지만 Windows 서비스에서 호출 될 때마다 정확하게 50 초가 지연되면 git 명령이 즉시 실행됩니다.

사용 권한 문제가 발생했습니다. 내 Windows 서비스를 사용자 (내 경우에는 관리자)로 실행하도록 구성한 후 git 프로세스가 즉시 실행되었습니다. 서비스를 "사용자"로 실행하도록 서비스 설치 프로그램을 수정할 수도 있지만 서비스 속성을 설치 한 후에는 동일한 효과로 수정할 수 있습니다.

지연을 피하기 위해 "로컬 서비스"를 사용하는 방법이있을 수 있지만 어떻게 될지 모르겠습니다.

관련 문제