2009-04-22 8 views
9

¿Existe un dominio de aplicación para cada programa C# incluso si no creamos específicamente un dominio de aplicación? ¿Por qué es requerido? He leído acerca de ensamblajes de terceros que bloquean la aplicación completa si no los cargamos en un dominio de aplicación diferente. No entendí bien ese punto. ¿Alguien puede explicar esto también?¿Hay un dominio de aplicación para cada programa C#?

Respuesta

15

AppDomain es más o menos como un proceso, es una infraestructura en la que se ejecuta su aplicación. Un ensamblado .NET debe cargarse en un AppDomain para poder ejecutarse. No es necesario cargar ensamblajes de terceros en AppDomains, pero si lo hace, proporciona aislamiento entre ellos (como dos procesos separados) y el mal funcionamiento en uno no afectará al otro. Los dominios de aplicación se pueden descargar de forma independiente.

Como ejemplo, SQL Server usa AppDomain s para cargar ensamblajes CLR de forma segura en su proceso.

2

Cada aplicación tiene al menos un dominio de aplicación, sí.

No sé lo que significa la nota sobre conjuntos de terceros.

1

hay al menos un dominio de aplicación para cada programa, puede crear tantos como desee, pero rara vez necesitará más de uno.

Es básicamente un contenedor donde se ejecuta el código que se ejecuta con una confianza particular.

1

Hay un dominio de aplicación predeterminado en el que se carga su aplicación (cada instancia obtiene la suya).

La falla significa que un ensamblado de un tercero (es decir, un complemento) bloqueará toda su aplicación cuando falle si no la carga en un dominio de aplicación separado. Por lo tanto, es una buena práctica cargar complementos en un dominio de aplicación separado, ya que un bloqueo en el dominio de una aplicación solo bloqueará el dominio de esa aplicación y no los otros dominios. El CLR Add-In blog tiene algunas publicaciones sobre esto.

Una cosa importante a tener en cuenta es que un dominio de aplicación no necesariamente tiene que estar en el mismo proceso o en el mismo sistema, por lo que básicamente lo necesita para la comunicación remota.

3

He leído sobre los ensamblados de 3 ª parte que causan choque si no hacemos uso de dominio de aplicación

Creo que está hablando sobre la carga de otros conjuntos en los dominios de aplicaciones separadas. De esta forma, pueden aislarse de su espacio de direcciones para evitar que un bloqueo en su código lo afecte. El costo es que la comunicación con un ensamblado en un dominio de aplicación separado es más difícil y tiene una penalización de perfusión, ya que todas las llamadas deben someterse a martiaje a través del límite del dominio de la aplicación.

Este es un tema bastante adelantado, recomendaría leer en Richter (otros libros están disponibles).

Cuestiones relacionadas