Câu trả lời JaredPar là tốt, ngoại trừ anh ta không chú ý raison d'être cho AppDomains - đó là bạn chỉ có thể dỡ bỏ một hội bằng cách dỡ AppDomain của nó. Nếu bạn là một tiến trình hệ điều hành chạy lâu dài và bạn muốn phải tải và sau đó dỡ các tổ hợp vì bất kỳ lý do gì thì bạn cần có AppDomain. Ví dụ nguyên mẫu ở đây là ASP.NET, tải các tập hợp mã ứng dụng theo yêu cầu và sau đó có thể tải chúng xuống sau, khi các ứng dụng không còn được sử dụng tích cực nữa.
Chi phí bạn phải trả cho khả năng dỡ tải là sự độc lập đó - bạn cần giao tiếp qua ranh giới AppDomain, Không thể thực hiện một cuộc gọi phương thức đơn giản. Bạn cần quản lý vòng đời của AppDomain. Vân vân.
Nếu bạn chỉ cần tải động các Assemblies và không nghĩ rằng bạn sẽ cần dỡ chúng trong vòng đời của một quá trình thì có thể bạn không cần chạy nhiều AppDomains. Một ví dụ điển hình ở đây có thể là một ứng dụng phong phú hỗ trợ mô hình plug-in, trong đó nó phát hiện ra các cụm plug-in trong thư mục "etc" và tải chúng lên tất cả. Tuy nhiên, nếu mô hình trình cắm yêu cầu dỡ bỏ các trình cắm thêm ... thì tốt.
Có những tình huống vượt trội hơn. Giống như, giả sử bạn muốn tải 2 phiên bản khác nhau của Assembly cùng một lúc. Bạn có thể gặp phải những cạm bẫy nếu không tách biệt chúng với AppDomains. Nhưng điều đó sẽ khá hiếm.
Kịch bản cốt lõi biện minh cho sự tồn tại của AppDomains là quá trình chạy lâu dài phải có khả năng dỡ bỏ các tập hợp.
Tất nhiên, các ứng dụng có thể dựa vào quy trình hệ điều hành khi bạn muốn dỡ bỏ một lắp ráp. Nói cách khác, bạn có thể có 3 hoặc 4 quy trình hợp tác đang chạy, mỗi quy trình có một tập hợp các Cụm lắp ráp riêng và khi bạn muốn dỡ bỏ một lắp ráp, chỉ cần tắt quá trình lưu trữ lắp ráp đó. Nhưng AppDomain cung cấp một cơ chế hiệu suất cao hơn để làm điều đó, mà không yêu cầu dừng / bắt đầu quá trình hoặc kết hợp giữa các quá trình, vẫn nặng hơn so với các ứng dụng liên kết giữa AppDomain được mô tả trước đây. Ý tôi là nó vẫn đang hối hận nhưng chuyển đổi ngữ cảnh chậm hơn và nhiều hơn.