La risposta di JaredPar è buona, ad eccezione del fatto che non nota lo raison d'etre per AppDomains, ovvero che è possibile SCARICARE un assembly scaricando il relativo AppDomain. Se si utilizza un processo operativo a esecuzione prolungata e si prevede di caricare e successivamente scaricare gli assembly per qualsiasi motivo, è necessario un AppDomain. L'esempio prototipo qui è ASP.NET, che carica gli assembly del codice app su richiesta e quindi può scaricarli in un secondo momento, quando le app non vengono più utilizzate attivamente.
Il costo che si paga per la capacità di scaricare è tale indipendenza: è necessario comunicare attraverso il confine AppDomain, Impossibile effettuare una chiamata al metodo semplice. È necessario gestire il ciclo di vita di AppDomain. Ecc
Se avete solo bisogno di caricare dinamicamente Assemblee e non pensate è necessario scaricarli durante la vita di un singolo processo allora probabilmente non è necessario eseguire più AppDomain. Un buon esempio potrebbe essere un'app ricca che supporta un modello plug-in, in cui annusa gli assembly plug-in in una directory "etc" e li carica tutti. Tuttavia, se il modello plug-in richiede lo scarico dei plug-in ... beh.
Esistono scenari esterni. Ad esempio, supponiamo di voler caricare 2 versioni differenti di un assieme nello stesso momento. È possibile incorrere in insidie se non si segrega con AppDomains. Ma sarà abbastanza raro.
Lo scenario principale che giustifica l'esistenza di AppDomains è il processo a esecuzione prolungata che deve essere in grado di scaricare gli assembly.
Naturalmente, le applicazioni possono fare affidamento sul processo del sistema operativo quando si desidera scaricare un assieme. In altre parole, è possibile che siano in esecuzione 3 o 4 processi cooperanti, ognuno con il proprio set di assiemi, e quando si desidera scaricare un assembly, è sufficiente arrestare il processo che ospita quell'assembly. Ma l'AppDomain offre un meccanismo più perfetto per farlo, senza richiedere processi stop/start o cross-process, che è ancora più pesante delle comunicazioni cross-AppDomain descritte in precedenza. Voglio dire che è ancora in servizio remoto, ma è più lento e più commutazione di contesto.
La preoccupazione principale è che non capisco le capacità che sto ottenendo usandole. Ho letto che si tratta di un processo leggero ma sembra che porti più di quello e potrei mancare qualcosa che potrebbe mordermi più tardi. IE Sto prendendo più del necessario. –