La réponse de JaredPar est bonne, sauf qu'il ne note pas le raison d'etre pour AppDomains - qui est que vous ne pouvez DÉCHARGER un assemblage qu'en déchargeant son AppDomain. Si vous êtes un processus de système d'exploitation de longue durée, et que vous vous attendez à devoir charger puis décharger des assemblages pour une raison quelconque, vous avez besoin d'un AppDomain. L'exemple prototype ici est ASP.NET, qui charge les assemblys de code d'application à la demande et peut ensuite les décharger plus tard, lorsque les applications ne sont plus utilisées activement.
Le coût que vous payez pour la capacité de déchargement est cette indépendance - vous devez communiquer à travers la limite AppDomain, Impossible de faire un appel de méthode simple. Vous devez gérer le cycle de vie AppDomain. Etc.
Si vous avez juste besoin de charger les assemblées et ne pensez pas de façon dynamique, vous aurez besoin de les décharger au cours de la vie d'un seul processus alors vous avez probablement ne besoin d'exécuter plusieurs domaines d'application. Un bon exemple ici pourrait être une application riche qui prend en charge un modèle de plug-in, où il renifle les assemblys de plug-ins dans un répertoire "etc" et les charge tous. Cependant, si le modèle de plug-in appelle le déchargement des plug-ins ... eh bien.
Il existe des scénarios plus éloignés. Supposons que vous vouliez charger deux versions différentes d'un assemblage en même temps. Vous pouvez rencontrer des pièges si vous ne les séparez pas avec AppDomains. Mais ce sera assez rare.
Le scénario de base qui justifie l'existence de AppDomains est le processus de longue durée qui doit pouvoir décharger des assemblys.
Bien sûr, les applications peuvent s'appuyer sur le processus du système d'exploitation lorsque vous voulez décharger un assemblage. En d'autres termes, vous pouvez exécuter 3 ou 4 processus de coopération, chacun avec son propre ensemble d'assemblys, et lorsque vous voulez décharger un assembly, arrêtez simplement le processus qui héberge cet assembly. Toutefois, l'AppDomain offre un mécanisme de meilleure performance pour ce faire, sans nécessiter de processus stop/start ou inter-process, ce qui est plus lourd que les communications inter-AppDomain décrites précédemment. Je veux dire c'est encore à distance mais c'est plus lent et plus de changement de contexte.
Le principal souci est que je ne comprends pas les capacités que je reçois en les utilisant. J'ai lu qu'ils sont un processus léger, mais ils semblent que le porter plus que cela et il me manque peut-être quelque chose qui pourrait me mordre plus tard. IE Je sors plus que ce dont j'ai besoin. –