JaredPar의 대답은 좋습니다. 단, AppDomains에 대한 이유 를 알지 못합니다 . 즉, AppDomain을 언로드하여 어셈블리를 언로드 할 수만 있다는 것입니다. 오래 실행되는 OS 프로세스이고 어떤 이유로 든 어셈블리 를로드 한 다음 나중에 언로드 해야하는 경우 AppDomain이 필요합니다. 여기의 프로토 타입 예제는 ASP.NET으로, 요청시 앱 코드 어셈블리를로드 한 다음 앱이 더 이상 활발하게 사용되지 않을 때 나중에 언로드 할 수 있습니다.
언로드 기능에 대해 지불하는 비용은 독립성입니다. AppDomain 경계를 넘어 통신해야합니다. 간단한 메서드 호출을 만들 수 없습니다. AppDomain 수명주기를 관리해야합니다. 기타.
그냥 동적으로로드 어셈블리에 필요하고 생각하지 않으면 당신은 그들을 언로드해야합니다 단일 프로세스의 수명 동안 그때는 아마 하지 않는 여러 응용 프로그램 도메인을 실행해야합니다. 여기에 좋은 예는 플러그인 모델을 지원하는 풍부한 앱으로, "etc"디렉토리에서 플러그인 어셈블리를 찾아 내고 모두로드하는 것입니다. 그러나 플러그인 모델이 플러그인 언로드를 요구하는 경우 ... 음.
외부 시나리오가 있습니다. 마찬가지로 두 개의 서로 다른 버전의 어셈블리를 동시에로드한다고 가정합니다. AppDomain으로 분리하지 않으면 함정에 빠질 수 있습니다. 그러나 그것은 매우 드문 일입니다.
AppDomains의 존재를 정당화하는 핵심 시나리오는 어셈블리를 언로드 할 수 있어야하는 장기 실행 프로세스입니다.
물론 어셈블리를 언로드하려는 경우 응용 프로그램은 OS 프로세스에 의존 할 수 있습니다. 즉, 각각 자체 어셈블리 집합이있는 3 개 또는 4 개의 협력 프로세스를 실행할 수 있으며 어셈블리를 언로드하려는 경우 해당 어셈블리를 호스팅하는 프로세스를 종료하면됩니다. 그러나 AppDomain은 프로세스 중지 / 시작 또는 프로세스 간 통신을 요구하지 않고이를 수행 할 수있는 더 높은 성능의 메커니즘을 제공합니다. 이는 앞서 설명한 교차 AppDomain 통신보다 여전히 무겁습니다. 내 말은 여전히 원격이지만 더 느리고 더 많은 컨텍스트 전환입니다.