.NET tiene este concepto de dominios de aplicación que, según tengo entendido, se puede usar para cargar un ensamblado en la memoria. He investigado un poco sobre los dominios de aplicación y he ido a mi librería local para obtener conocimientos adicionales sobre este tema, pero parece muy escaso.
Todo lo que sé que puedo hacer con los dominios de aplicación es cargar ensamblados en la memoria y puedo descargarlos cuando quiera.
¿Cuáles son las otras capacidades que he mencionado de los dominios de aplicación? ¿Los subprocesos respetan los límites de los dominios de aplicación? ¿Existe algún inconveniente al cargar ensamblados en diferentes dominios de aplicación que no sean los principales dominios de aplicación más allá del rendimiento de la comunicación?
Los enlaces a recursos que discuten los dominios de aplicación también serían buenos. Ya revisé MSDN, que no tiene tanta información sobre ellos.
La respuesta de JaredPar es buena, excepto que no tiene en cuenta la razón de ser de AppDomains, que es que solo puede DESCARGAR un ensamblado descargando su AppDomain. Si tiene un proceso de sistema operativo de larga duración y espera tener que cargar y luego descargar ensamblados por cualquier motivo, entonces necesita un AppDomain. El ejemplo prototípico aquí es ASP.NET, que carga ensamblajes de código de aplicación a pedido y luego puede descargarlos más tarde, cuando las aplicaciones ya no se utilizan activamente.
El costo que paga por la capacidad de descargar es esa independencia: necesita comunicarse a través del límite de AppDomain. No se puede realizar una simple llamada a un método. Necesita administrar el ciclo de vida de AppDomain. Etc.
Si solo necesita cargar ensamblados dinámicamente y no cree que deba descargarlos durante la vida de un solo proceso, entonces probablemente no necesite ejecutar múltiples AppDomains. Un buen ejemplo aquí podría ser una aplicación enriquecida que admita un modelo de complemento, donde rastrea los ensamblajes de complementos en un directorio "etc" y los carga todos. Sin embargo, si el modelo de complementos requiere descargar los complementos ... bueno.
Hay escenarios atípicos. Supongamos que desea cargar 2 versiones diferentes de un ensamblado al mismo tiempo. Puede encontrarse con dificultades si no los separa con AppDomains. Pero eso será bastante raro.
El escenario central 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 del sistema operativo cuando desee descargar un ensamblaje. En otras palabras, podría tener 3 o 4 procesos cooperativos en ejecución, cada uno con su propio conjunto de ensamblados, y cuando desee descargar un ensamblado, simplemente cierre el proceso que aloja ese ensamblado. Pero AppDomain ofrece un mecanismo de mayor rendimiento para hacer eso, sin requerir la detención / inicio del proceso o las comunicaciones entre procesos, que es aún más pesado que las comunicaciones entre AppDomain descritas anteriormente. Quiero decir, todavía es remoto, pero es más lento y cambia de contexto.
fuente
Algunas cosas que puede hacer con AppDomains:
En pocas palabras, es un límite de seguridad y casi un límite de proceso. En lo que respecta al rendimiento, varios AppDomains dentro de un proceso no representan una sobrecarga significativa. Lanzar un proceso separado en lugar de un AppDomain es mucho más costoso.
fuente