2009-04-24 3 views
7

나는 리플렉션에 상당히 익숙하지 않고 (두 번째) AppDomain을 사용하는 것이 궁금합니다. 사업 응용 프로그램에 실용적인 응용 프로그램이 있습니까?AppDomain은 언제 사용합니까?

답변

9

수많은 용도로 사용됩니다. 보조 AppDomain은 OS가 프로세스를 제공하는 격리와 유사한 정도의 격리를 제공 할 수 있습니다.

"플러그인"DLL을 동적으로로드하는 데 실제로 사용한 적이 있습니다. 필자는 기본 실행 파일을 시작할 때 DLL을위한 디렉토리 검색을 지원하고로드하고 특정 인터페이스 (예 : 플러그인 계약)가 구현되었는지 여부를 확인하기 위해 유형을 검사했습니다. 보조 AppDomain을 만들지 않으면 원하는 인터페이스를 구현하는 형식이없는 DLL/어셈블리를 언로드 할 수 없습니다. 추가 어셈블리와 형식 등을 처리하는 대신 보조 AppDomain을 만들고 어셈블리를로드 한 다음 형식을 검사 할 수 있습니다. 작업이 완료되면 보조 AppDomain과 유형을 제거 할 수 있습니다.

+0

찾고 있던 DLL을 찾으면 해당 플러그인을 기본 AppDomain에로드 했습니까? 또는 그들은 항상 두 번째 AppDomain에 머물러 있었습니까? – Steven

+1

아니요, '기본'도메인에로드 했으므로 호출을 마샬링 할 필요가 없었습니다. 우리가 사용했던 또 다른 엣지 케이스 상황은 여러 논리 서비스를 자체 AppDomains에로드하는 서비스에있었습니다. 솔직히, 저것은 나의 결정이 아니었고 우리가 방금 별개의 서비스를 만들어야한다고 생각했습니다. –

2

시간의 99 % 나는 추가 AppDomains를 피할 것입니다. 그들은 본질적으로 분리 된 프로세스입니다. 한 도메인에서 다른 도메인으로 데이터를 마샬링해야만 복잡성 및 성능 문제가 추가됩니다.

사람들은 AppDomain을 사용하여 AppDomain으로로드 된 어셈블리를 언로드 할 수 없다는 문제를 해결하려고했습니다. 따라서 동적 어셈블리를로드 한 다음 전체 AppDomain을 언로드하여 어셈블리와 관련된 메모리를 확보 할 수있는 두 번째 AppDomain을 만듭니다.

& 언로드 어셈블리를 동적으로로드해야하는 경우가 아니면 걱정할 가치가 없습니다.

+1

플러그 인 모델에서와 같이 형식 검사를 위해 어셈블리를로드하는 데 유용합니다. 발생하는 모든 것은 약간의 시작 시간입니다. –

+0

동의합니다. 어느 시점에서 언로드 할 경우에만 그렇습니다. 그렇지 않으면 아무런 차이가 없습니다. mot 비즈니스 응용 프로그램의 경우에도 필자는이 파일이 필요하지 않길 기대합니다. – Steven

+0

다른 AppDomains에는 프로세스와 분리가 없습니다. 프로세스 메모리 공간을 공유합니다. –

0

단일 도메인의 인스턴스가 여러 개인 경우 AppDomains가 유용합니다. 예를 들어, 일부 장치에 대한 통신 프로토콜을 구현하는 어셈블리가 있고이 어셈블리는 싱글 톤을 사용합니다. 이 클래스의 여러 인스턴스를 인스턴스화하여 (여러 장치와 통신하기 위해) 인스턴스가 서로 간섭하지 않도록하려면 AppDomains가이 용도로 적합합니다.

그러나 AppDomain 경계에서 통신하기 위해 더 많은 작업을해야하므로 프로그래밍이 어려워집니다.