Soy bastante nuevo para la reflexión y me pregunto para qué usaría un (segundo) AppDomain. ¿Qué aplicación práctica tendría uno en una aplicación comercial?¿Cuándo usaría un Dominio de aplicación?
Respuesta
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.
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.
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. –
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
Diferentes AppDomains no tienen la misma separación que los procesos. Comparten espacio de memoria de proceso. –
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.
- 1. Multithreading: ¿Cuándo usaría un Join?
- 2. Cuándo usaría mmap
- 3. ¿Cuándo usaría un delegado en asp.net?
- 4. ¿Cuándo usaría XML en lugar de SQL?
- 5. Twisted, gevent eventlet - Cuándo los usaría
- 6. ¿Cuándo usaría XML sobre JSON para Ajax?
- 7. ¿Cuándo usaría Java collections singletonMap method?
- 8. Cuándo usaría el patrón de diseño de mediador
- 9. ¿Cuándo nos usaría Ext.application() vs. Ext.Loader.setConfig, .require y .onReady?
- 10. ¿Cuándo usaría AutoResetEvent y ManualResetEvent en lugar de Monitor.Wait()/Monitor.Pulse()?
- 11. ¿Qué es un dominio de aplicación .NET?
- 12. ¿Qué es un dominio de aplicación .NET?
- 13. ¿Cuándo y por qué usaría Apache commons-digester?
- 14. ¿Cuándo exactamente un archivo DLL usaría un montón diferente al ejecutable?
- 15. aplicación google appspot en un dominio personalizado?
- 16. ¿Cómo ejecutar un método en un dominio de aplicación separado?
- 17. ¿Puede un dominio de aplicación restringirse a un directorio?
- 18. Pasando un socket a un nuevo dominio de aplicación
- 19. ¿Por qué un desarrollador usaría Silverlight?
- 20. ¿Dónde usaría C# Runtime Compilation?
- 21. ¿Cuándo entran en juego los controladores de eventos de dominio?
- 22. CPU y tapa de memoria para un dominio de aplicación
- 23. ¿Cuándo puede una aplicación ser un juego?
- 24. Impersonación de nivel de dominio de aplicación
- 25. ¿Hay un dominio de aplicación para cada programa C#?
- 26. Pasar y ejecutar delegar en un dominio de aplicación separado
- 27. Cargando archivos DLL en un dominio de aplicación diferente
- 28. AppDomain Unload killing Parent Dominio de aplicación
- 29. Cuándo usar evento de dominio frente a envío doble
- 30. ¿Cómo usaría jQuery para ajaxify un formulario?
¿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
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. –