2009-03-20 35 views

Respuesta

69

El más importante es que el uso su código tiene que tener una - es decir, todo lo que escribe en C# ejecuta en un AppDomain. Ese es importante ;-P

Si se refiere a adicionales app-dominios:

Al usar plugins y otro código no confiable, que le permite tanto el aislamiento, y la posibilidad de descargarlos (no se puede descargar ensamblajes, solo dominios de aplicación completos).

Lo estoy usando actualmente para cargar diners generados dinámicamente, para que pueda descargarlos.

También le permiten configurar diferentes archivos de configuración, niveles de confianza, etc., pero tienen costos asociados de complejidad y comunicación remota.

MSDN tiene una sección en dominios de aplicación, here.

27

No puedo decirle cuál es el uso más importante, ya que eso depende de la situación.

Los AppDomains son útiles para sandboxing partes de su aplicación. Puede cargar extensiones en un AppDomain y descargarlas de nuevo, algo que no puede hacer de otra manera. Puede asignar derechos específicos a AppDomains. Por objetos predeterminados en diferentes AppDomains no pueden accederse entre sí.

Los AppDomains se pueden ver como procesos livianos, ya que ofrecen muchas de las mismas características. Sin embargo, a diferencia de un proceso, los nuevos AppDomains no tienen su propio hilo por defecto. Debe administrar AppDomains y threads usted mismo.

Además, AppDomains todos comparten el mismo montón administrado. Por lo general, esto no es un problema, pero puede tener efectos sorprendentes ya que algunos casos, como las cadenas, se comparten entre los AppDomains. Para un uso regular, esto no es un problema, pero si utiliza cadenas para el bloqueo, los hilos en diferentes dominios de aplicación pueden afectarse entre sí.

+2

Nota agradable sobre cadenas. – AgentFire

+2

"Todos los AppDomains comparten el mismo montón gestionado". ¿eso significa que también comparten clases estáticas o métodos estáticos? – Mathematics

20

En general, no es una práctica de codificación tan diaria usar AppDomains, esto podría considerarse algo así como un concepto avanzado ... pero a partir de esto, es importante entender mejor los conceptos detrás de la palabra "AppDomain".

En términos de arquitectura, y tomando lo más simple posible, un AppDomain es un contenedor de aislamiento incluso en términos de direccionamiento de memoria, dentro de él se cargan y ejecutan todos los ensambles necesarios, incluso si este concepto es más complicado para explicar en detalle (espero que no se trate de tu pregunta para profundizar más).

A partir de ahí, la clase AppDomain primero se usa para obtener acceso al dominio de la aplicación de aplicación relacionada, esto se puede hacer a través de la implementación de la propiedad Singleton AppDomain.CurrentDomain. De esta manera es posible:

  1. acceso obtener los ensamblados cargados;
  2. obtener acceso a las ranuras de datos compartidos dominio_aprendizaje;
  3. coordinación interna, en términos de desenvolver instancias creadas desde ensamblajes cargados en dominios creados.

Luego, la clase dominio de aplicación se utiliza para:

  1. crear más "dominios" en el mismo proceso;
  2. ejecutando ensamblajes en el proceso;
  3. administre el proceso de carga/descarga del appdomain.

Podría ser útil para tomar una vista del código del nuevo marco de Microsoft (aún no publicado) MEF (Managed Extesibility Framework) que se basa realmente en conceptos como AppDomains creaciones y descargar, asambleas de carga dinámica.

Como un simple ejemplo de cosas y ejemplos de lo que puede hacer con AppDomains, puedo compartir este link.

Espero que haya respondido a su pregunta.

+0

+1 para el gran enlace al final! – jrharshath

7

A C# AppDomain es un contenedor lógicamente aislado dentro del cual se ejecuta el código .NET. Cuando ejecuta cualquier código .NET siempre se ejecuta en un dominio de aplicación predeterminado.

Mire este video de 30 minutos de youtube What is C# AppDomain ? que explica AppDomain con más detalle.

C# Appdomain

Pero deja que todavía intento de explicar con más detalle. Digamos que obtienes una DLL de terceros y quieres usarla en tu aplicación. Pero también duda de que el tercero pueda tener algún código malicioso, por lo que le gustaría ejecutar el DLL de terceros en un entorno restringido. Al igual que no desea que el tercero acceda a su unidad c: o elimine archivos, etc.

Para que pueda crear dos AppDomains uno que es para el tercero y uno para sus propias clases de C#. Para el dominio de aplicación de terceros, aplicará la restricción de seguridad de que no puede acceder a c: unidad y para sus DLL de C# tendrá un dominio de aplicación no restringido.