2010-01-28 2 views
4

파트 관리 (C#) 및 비 관리 코드 (C/C++ 라이브러리)를 사용하는 .NET 기반 Windows 서비스를 개발했습니다.관리되는 응용 프로그램을 실행할 때 .NET에서 수행하는 시간이 가장 많이 소요되는 검사는 무엇입니까?

일부 도메인 환경 (예 : abc.com 도메인의 Win 2k3 32 비트 서버)에서는 서비스가 시작될 때까지 (특히 OS 다시 시작시) 30 초 이상 걸리는 경우가 있으므로 서비스를 시작하지 못할 수 있습니다. 나는 그것이 기업 수준의 보안과 관련이 있다고 의심하지만 확실하지는 않습니다.

http://msdn.microsoft.com/en-us/library/aa720255%28VS.71%29.aspx

내가 성공하지 않고 다음 시도했다 : - servicebase 구현에서 가능한 한 사용 지침을 이동하여 지연로드의 참조 - 을 (특히 XML 네임 스페이스 로딩 지연의 원인을 알고) - 지연로드 및 log4net 구성 - 작업자 스레드 의 시작을 지연 - - NGEN 를 사용하여 코드를 사전 컴파일은 바이너리에게 를 unsign/기호 - - 안에 설정 + 매니페스트 decencies 추가/제거 구성 설정을 사용 (이됩니다 많은 설정과 모든 범위의 범위 응용 프로그램으로 설정 됨) - GAC에 대한 모든 종속성 추가

Main 메서드가 구현 된 클래스에 대한 보안 요구 사항을 아직 추가하지 않았습니다. 자동 생성 된 코드를 검사 한 후, 설정 클래스가 singletone이고 호출시 인스턴스를 가져 오기 때문에 자신의 구성 로더를 구현하지 않았습니다.

log4net 종속성을 완전히 제거하여 작동하지만이 옵션이 아닙니다.

네트워크 카드가 비활성화되면 즉시 서비스가 시작됩니다.

+0

주 코드에서 모든 코드를 이동할 수 있습니까? –

+0

log4net 로그의 대상은 무엇입니까? 다른 서비스 (예 : SQL Server)에 종속 될 수 있습니까? 그렇다면 물론 다른 서비스가 시작될 때까지 서비스가 시작되지 않도록 할 수 있습니다. – Jay

답변

1

일반적으로 SysInternals의 프로세스 모니터를 사용하여이 문제를 진단합니다. 이것이 서비스라는 사실은 문제를 복잡하게 만듭니다. 비슷한 문제 해결 세션을 보려면 blog post을 확인하십시오.

CRL (인증서 해지 목록) 문제 btw와 유사합니다. 제어판, 인터넷 옵션, 고급 탭, 보안, "게시자의 인증서 해지 확인"을 해제하십시오.

+0

저는 간단한 콘솔 응용 프로그램처럼 작동하도록 WinDbg를 구현하는 방식으로 구현했습니다. windbg 결과를 살펴보면 응용 프로그램이 시작된 후 C++ 라이브러리가로드되고 구성 및 xml 네임 스페이스가로드되고 다음 인스턴스를로드하는 데 59 초가 걸리는 종속성 중 하나가 발견되었습니다. . ModLoad : MyDependencyDll.dll . C : \ WINDOWS \ assembly \ NativeImages_v2.0.50727_32 \ System.Xml \ 5913d3f81e77194ec833991b1047a532 \ System.Xml.ni.dll (d18.afc) : CLR 예외 - 코드 e0434f4d (첫 번째 기회) . C : \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ culture.dll – ltorje

+0

글쎄, 프로세스 모니터를 사용하십시오. –

+0

nobugz 고맙습니다. nobugz – ltorje

0

우리는 이름 확인 (심지어 12.0.0.1까지)이있는 log4net UDP appender를 사용하면 시작시 속도가 느려지는 것을 발견했습니다.

관련 문제