나는 리플렉션에 상당히 익숙하지 않고 (두 번째) AppDomain을 사용하는 것이 궁금합니다. 사업 응용 프로그램에 실용적인 응용 프로그램이 있습니까?AppDomain은 언제 사용합니까?
답변
수많은 용도로 사용됩니다. 보조 AppDomain은 OS가 프로세스를 제공하는 격리와 유사한 정도의 격리를 제공 할 수 있습니다.
"플러그인"DLL을 동적으로로드하는 데 실제로 사용한 적이 있습니다. 필자는 기본 실행 파일을 시작할 때 DLL을위한 디렉토리 검색을 지원하고로드하고 특정 인터페이스 (예 : 플러그인 계약)가 구현되었는지 여부를 확인하기 위해 유형을 검사했습니다. 보조 AppDomain을 만들지 않으면 원하는 인터페이스를 구현하는 형식이없는 DLL/어셈블리를 언로드 할 수 없습니다. 추가 어셈블리와 형식 등을 처리하는 대신 보조 AppDomain을 만들고 어셈블리를로드 한 다음 형식을 검사 할 수 있습니다. 작업이 완료되면 보조 AppDomain과 유형을 제거 할 수 있습니다.
시간의 99 % 나는 추가 AppDomains를 피할 것입니다. 그들은 본질적으로 분리 된 프로세스입니다. 한 도메인에서 다른 도메인으로 데이터를 마샬링해야만 복잡성 및 성능 문제가 추가됩니다.
사람들은 AppDomain을 사용하여 AppDomain으로로드 된 어셈블리를 언로드 할 수 없다는 문제를 해결하려고했습니다. 따라서 동적 어셈블리를로드 한 다음 전체 AppDomain을 언로드하여 어셈블리와 관련된 메모리를 확보 할 수있는 두 번째 AppDomain을 만듭니다.
& 언로드 어셈블리를 동적으로로드해야하는 경우가 아니면 걱정할 가치가 없습니다.
플러그 인 모델에서와 같이 형식 검사를 위해 어셈블리를로드하는 데 유용합니다. 발생하는 모든 것은 약간의 시작 시간입니다. –
동의합니다. 어느 시점에서 언로드 할 경우에만 그렇습니다. 그렇지 않으면 아무런 차이가 없습니다. mot 비즈니스 응용 프로그램의 경우에도 필자는이 파일이 필요하지 않길 기대합니다. – Steven
다른 AppDomains에는 프로세스와 분리가 없습니다. 프로세스 메모리 공간을 공유합니다. –
단일 도메인의 인스턴스가 여러 개인 경우 AppDomains가 유용합니다. 예를 들어, 일부 장치에 대한 통신 프로토콜을 구현하는 어셈블리가 있고이 어셈블리는 싱글 톤을 사용합니다. 이 클래스의 여러 인스턴스를 인스턴스화하여 (여러 장치와 통신하기 위해) 인스턴스가 서로 간섭하지 않도록하려면 AppDomains가이 용도로 적합합니다.
그러나 AppDomain 경계에서 통신하기 위해 더 많은 작업을해야하므로 프로그래밍이 어려워집니다.
- 1. 언제 sIFR을 사용합니까?
- 2. MVC3 지역을 언제 사용합니까?
- 3. IOC 용기는 언제 사용합니까?
- 4. 싱글 톤을 언제 사용합니까?
- 5. .net의 타이머 - 언제 사용합니까?
- 6. 임베디드 문서는 언제 사용합니까?
- 7. 비관적 동시성을 언제 사용합니까?
- 8. htmlspecialchars() 함수를 언제 사용합니까?
- 9. 정확히 언제 UrlEncode를 사용합니까?
- 10. ASP.NET, 비동기, 언제 사용합니까?
- 11. WYSIWYG 편집기를 언제 사용합니까?
- 12. 나침반 부분은 언제 사용합니까?
- 13. wsgen을 언제 사용합니까?
- 14. IBOutlet을 언제 사용합니까?
- 15. 언제 ByteString을 사용합니까?
- 16. 언제/어디에서 PDO를 사용합니까?
- 17. 언제 메소드 앨리어싱을 사용합니까?
- 18. 처리 언어를 언제 사용합니까?
- 19. 클로저를 언제 사용합니까?
- 20. 사전을 언제 사용합니까?
- 21. Page.IsValid를 언제 사용합니까?
- 22. 싱글 톤을 언제 사용합니까?
- 23. 언제 BPEL과 ESB를 사용합니까?
- 24. reinterpret_cast를 언제 사용합니까?
- 25. IDE를 언제 사용합니까?
- 26. void 포인터를 언제 사용합니까?
- 27. 필드 변수를 언제 사용합니까?
- 28. 언제 MEF를 사용합니까
- 29. 언제 PHP에서 소멸자를 사용합니까?
- 30. 변환 연산자는 언제 사용합니까?
찾고 있던 DLL을 찾으면 해당 플러그인을 기본 AppDomain에로드 했습니까? 또는 그들은 항상 두 번째 AppDomain에 머물러 있었습니까? – Steven
아니요, '기본'도메인에로드 했으므로 호출을 마샬링 할 필요가 없었습니다. 우리가 사용했던 또 다른 엣지 케이스 상황은 여러 논리 서비스를 자체 AppDomains에로드하는 서비스에있었습니다. 솔직히, 저것은 나의 결정이 아니었고 우리가 방금 별개의 서비스를 만들어야한다고 생각했습니다. –