JaredPar Antwort ist gut, außer er nicht die nicht beachten raison d'etre für AppDomains - das ist , dass Sie nur eine Versammlung UNLOAD kann durch seine AppDomain entladen. Wenn Sie ein Betriebssystem mit langer Laufzeit sind und erwarten, dass Sie Assemblys aus irgendeinem Grund laden und später entladen müssen, benötigen Sie eine AppDomain. Das prototypische Beispiel hierfür ist ASP.NET, das App-Code-Assemblys bei Bedarf lädt und sie später entladen kann, wenn die Apps nicht mehr aktiv verwendet werden.
Die Kosten, die Sie für das Entladen bezahlen, sind die Unabhängigkeit - Sie müssen über die AppDomain-Grenze kommunizieren. Es kann kein einfacher Methodenaufruf durchgeführt werden. Sie müssen den AppDomain-Lebenszyklus verwalten. Etc.
Wenn Sie Assemblies nur dynamisch laden müssen und nicht glauben, dass Sie sie während der Lebensdauer eines einzelnen Prozesses entladen müssen, müssen Sie wahrscheinlich nicht mehrere AppDomains ausführen. Ein gutes Beispiel hierfür könnte eine umfangreiche App sein, die ein Plug-In-Modell unterstützt, bei dem Plug-In-Assemblys in einem "etc" -Verzeichnis aufgespürt und alle geladen werden. Wenn das Plug-In-Modell jedoch das Entladen der Plug-Ins erfordert ... na ja.
Es gibt äußere Szenarien. Angenommen, Sie möchten zwei verschiedene Versionen einer Baugruppe gleichzeitig laden. Sie können auf Fallstricke stoßen, wenn Sie sie nicht mit AppDomains trennen. Aber das wird ziemlich selten sein.
Das Kernszenario, das die Existenz von AppDomains rechtfertigt, ist der lang laufende Prozess, der Assemblys entladen kann.
Natürlich können sich Anwendungen auf den Betriebssystemprozess verlassen, wenn Sie eine Assembly entladen möchten. Mit anderen Worten, es können 3 oder 4 kooperierende Prozesse mit jeweils eigenen Assemblys ausgeführt werden. Wenn Sie eine Assembly entladen möchten, fahren Sie einfach den Prozess herunter, der diese Assembly hostet. Die AppDomain bietet jedoch einen leistungsstärkeren Mechanismus, ohne dass Prozessstopp / -start oder prozessübergreifende Kommunikation erforderlich sind, der noch schwerer ist als die zuvor beschriebenen appDomainübergreifenden Kommunikation. Ich meine, es ist immer noch Remoting, aber es ist langsamer und mehr Kontextwechsel.