La respuesta de JaredPar es buena, excepto que él no nota el raison d'etre para AppDomains, que es que solo puede DESCARGAR un Ensamblaje descargando su AppDomain. Si usted es un proceso de sistema operativo de larga ejecución y espera tener que cargar y luego descargar ensamblajes por cualquier razón, entonces necesita un Dominio de aplicación. El ejemplo prototípico aquí es ASP.NET, que carga ensamblajes de código de aplicación bajo demanda y luego puede descargarlos más tarde, cuando las aplicaciones ya no se usan activamente.
El costo que paga por la capacidad de descarga es esa independencia; necesita comunicarse a través del límite del Dominio de la aplicación. No se puede hacer una llamada a un método simple. Debe administrar el ciclo de vida de AppDomain. Etc.
Si sólo tiene que cargar dinámicamente las asambleas y no creo que se necesita para descargarlos durante la vida de un solo proceso entonces es probable que no necesita ejecutar múltiples dominios de aplicación. Un buen ejemplo aquí podría ser una aplicación enriquecida que admita un modelo de complemento, en el que detecte los ensamblados de los complementos en un directorio "etc." y los cargue todo. Sin embargo, si el modelo de complemento solicita la descarga de los complementos ... bueno.
Hay escenarios externos. Como, supongamos que desea cargar 2 versiones diferentes de un ensamblaje al mismo tiempo. Puede encontrarse con dificultades si no las segrega con AppDomains. Pero eso será bastante raro.
El escenario principal que justifica la existencia de AppDomains es el proceso de larga ejecución que debe poder descargar ensamblados.
Por supuesto, las aplicaciones pueden confiar en el proceso de SO cuando desee descargar un ensamblaje. En otras palabras, podría tener 3 o 4 procesos en cooperación en ejecución, cada uno con su propio conjunto de ensamblajes, y cuando desee descargar un ensamblaje, simplemente cierre el proceso que aloja ese ensamblado. Sin embargo, AppDomain ofrece un mecanismo de mayor rendimiento para hacer eso, sin requerir procesos stop/start o cross-process comms, que es más pesado que las comunicaciones entre dominios AppDomain descritas anteriormente. Quiero decir que todavía es remota pero es más lenta y con más cambio de contexto.
La principal preocupación es que no entiendo las capacidades que obtengo al usarlas. Leí que son un proceso liviano, pero parece que llevan algo más que eso y me puede estar perdiendo algo que podría morderme más adelante. IE, estoy sacando más de lo que necesito. –