2009-04-24 27 views

Respuesta

9

Existen numerosos usos. Un AppDomain secundario puede proporcionar un grado de aislamiento que es similar al aislamiento que proporciona un sistema operativo.

Un uso práctico para el que lo he usado es cargar dinámicamente archivos DLL "plug-in". Quise apoyar el escaneo de un directorio de DLL al inicio del ejecutable principal, cargarlos y verificar sus tipos para ver si alguno implementó una interfaz específica (es decir, el contrato del complemento). Sin crear un AppDomain secundario, no tiene forma de descargar un archivo DLL/ensamblado que puede no tener ningún tipo que implemente la interfaz buscada. En lugar de transportar ensamblajes y tipos adicionales, etc. en su proceso, puede crear un AppDomain secundario, cargar el ensamblaje allí y luego examinar los tipos. Cuando hayas terminado, puedes deshacerte del AppDomain secundario y, por lo tanto, de tus tipos.

+0

¿Cargaste esos complementos en el AppDomain principal una vez que encontraste los dlls que estabas buscando? ¿O permanecieron siempre en el segundo dominio de la aplicación? – Steven

+1

No, los cargó en el dominio "principal", por lo que no tuvimos que intercambiar llamadas de un lado a otro. Otra situación límite en la que los usamos estaba en un servicio que cargó varios servicios lógicos en sus propios AppDomains. Honestamente, esa no fue mi decisión y pensé que deberíamos haber hecho servicios distintos. –

2

99% del tiempo evitaría AppDomains adicionales. Son procesos esencialmente separados. Debe reunir datos de un dominio a otro, lo que agrega problemas de complejidad y rendimiento.

Las personas han intentado utilizar AppDomains para eludir el problema de que no puede descargar ensamblados una vez que se han cargado en un AppDomain. De modo que crea un segundo dominio de aplicación donde puede cargar sus ensamblajes dinámicos y luego descargar el dominio de aplicación completo para liberar la memoria asociada con los ensamblajes.

A menos que necesite cargar dinámicamente & descargue Ensambles que realmente no valen la pena preocuparse.

+1

Usar para cargar conjuntos para la inspección de tipos, como en un modelo de complemento, es una gran utilidad para ellos. Todo en lo que se incurre es un poco de tiempo de inicio adicional. –

+0

De acuerdo, aunque solo si va a descargarlos en algún momento, de lo contrario no hace ninguna diferencia. También para aplicaciones comerciales mot no esperaría que se requirieran. – Steven

+0

Diferentes AppDomains no tienen la misma separación que los procesos. Comparten espacio de memoria de proceso. –

0

Los AppDomains son útiles cuando debe tener múltiples instancias de singleton. Por ejemplo, tiene un ensamblaje que implementa un protocolo de comunicación para algún dispositivo y este ensamblaje usa singletons. Si desea instanciar varias instancias de esta clase (para hablar con múltiples dispositivos) y quiere que las instancias no interfieran entre sí, entonces los AppDomains son perfectos para este propósito.

Hace la programación más difícil, sin embargo, ya que tiene que trabajar más para comunicarse a través de los límites de AppDomain.

Cuestiones relacionadas