Odpowiedź JaredPara jest dobra, z wyjątkiem tego, że nie zauważa racji bytu dla AppDomains - czyli tego, że można WYŁADOWAĆ zestaw tylko poprzez wyładowanie jego AppDomain. Jeśli jesteś długotrwałym procesem systemu operacyjnego i spodziewasz się, że będziesz musiał załadować, a następnie zwolnić zestawy z dowolnego powodu, potrzebujesz AppDomain. Prototypowym przykładem jest tutaj ASP.NET, który ładuje zestawy kodu aplikacji na żądanie, a następnie może je zwolnić później, gdy aplikacje nie są już aktywnie używane.
Koszt, który płacisz za możliwość wyładowania, to niezależność - musisz komunikować się przez granicę AppDomain, nie można wykonać prostego wywołania metody. Musisz zarządzać cyklem życia AppDomain. Itp.
Jeśli potrzebujesz tylko dynamicznie ładować zestawy i nie sądzisz, że będziesz musiał je wyładowywać w trakcie trwania pojedynczego procesu , prawdopodobnie nie musisz uruchamiać wielu AppDomains. Dobrym przykładem może być tutaj rozbudowana aplikacja, która obsługuje model wtyczek, w której wyszukuje zestawy wtyczek w katalogu „etc” i ładuje je wszystkie. Jeśli jednak model wtyczki wymaga wyładowania wtyczek ... cóż.
Istnieją scenariusze zewnętrzne. Przypuśćmy, że chcesz załadować 2 różne wersje zestawu w tym samym czasie. Możesz napotkać pułapki, jeśli nie oddzielisz ich za pomocą AppDomains. Ale to będzie dość rzadkie.
Podstawowy scenariusz, który uzasadnia istnienie AppDomains, to długotrwały proces, który musi mieć możliwość zwalniania zestawów.
Oczywiście aplikacje mogą polegać na procesie systemu operacyjnego, gdy chcesz zwolnić zestaw. Innymi słowy, możesz mieć uruchomione 3 lub 4 współpracujące procesy, każdy z własnym zestawem zestawów, a gdy chcesz zwolnić zestaw, po prostu zamknij proces, który obsługuje ten zestaw. Ale AppDomain oferuje mechanizm o wyższej wydajności, który to robi, bez konieczności zatrzymywania / uruchamiania procesu lub komunikacji między procesami, co jest jeszcze cięższe niż opisane wcześniej komunikaty cross-AppDomain. Chodzi mi o to, że nadal jest zdalny, ale jest wolniejszy i bardziej przełącza kontekst.