2012-05-14 5 views
0

.NET 인 프로세스 COM 서버 (Windows 탐색기 네임 스페이스 확장)에 여러 AppDomains를 만들어야합니다.LoaderOptimization을 in-process COM 서버에 적용하십시오.

내 테스트 콘솔 응용 프로그램에서는 40 초 안에 10 개의 도메인 + WPF 창을 만들 수 있는데, 이는 받아 들일 수 없습니다. LoaderOptimization.MultiDomainHost을 추가하면 최대 2 ~ 5 초까지 속도가 빨라지며 정상입니다.

그러나, COM 서버에는 Main 방법이없고, AppDomainSetup에 LoaderOptimization를 지정하는 경우에만로드 2 개 이상의 도메인을 추가로 영향을

(즉, 첫 번째 추가 응용 프로그램 도메인은 0.1 ~ 0.3 초 ​​3-4 초 다른 시작)

그래서 in-process COM 서버에 LoaderOptimization을 지정할 수 있습니까? 그렇다면 어떻게합니까?

+0

관리 코드에 네임 스페이스 확장을 쓰는 것이 최선의 방법인지 확신 할 수 없습니다. 상황은 바뀔 수 있지만이 게시물은 관련이 있습니다. http://blogs.msdn.com/b/oldnewthing/archive/2006/12/18/1317290.aspx –

+0

[.NET 4 확장] (http : // blogs. msdn.com/b/codefx/archive/2011/01/04/is-it-officially-supported-to-write-windows-shell-extension-using-net-4-today.aspx) 그리고 (아마 전혀 CLR 1.1/2.0/3.5도 컴퓨터에서) – wizzard0

답변

0

C#으로 코드를 작성하는 동안에는이 옵션을 설정할 수 없습니다. appdomain을 구성 할 수 있고 C++ 코드가 필요하도록 CLR을 직접 호스팅해야합니다. 핵심 MSDN 라이브러리 문서는 starts here으로 설정되었습니다.

왜 그렇게 오래 걸리는지 알아 내려고 노력하면서 결과를 산출해야합니다. 확실히 디스크에서 조립품을 찾는 데 드는 비용과 관련된 콜드 스타트 ​​문제는 아닙니다. 퍼포먼스 히트는 첫 번째 appdomain에만 관련이 있으며, 나중에 파일 시스템 캐시에서 어셈블리를 찾을 것이므로 빨리 수행해야합니다.

일리노이를 기계어 코드로 적시 컴파일하는 것과 관련하여 웜 스타트 문제가 발생합니다. 이 문제를 빨리 해결하려면 어셈블리에서 ngen.exe를 실행해야합니다.

+0

예, 이것은 웜 시작 문제입니다. 그리고 새 도메인에 대해 MultiDomainHost를 지정한 경우 어셈블리는 전체 응용 프로그램에 대해 정확히 2 번로드됩니다 . 이전에 CLR 호스트를 작성했지만 COM 서버로 작동해야하는 경우 어디에서 시작해야할지 모르겠다. (내 C++ COM 경험이 없기 때문에) – wizzard0