2010-03-03 9 views
7

De What is a .NET Application Domain?:ejemplo Código de múltiples dominios de aplicación .NET

Puede ejecutar varios dominios de aplicación en un solo proceso con el mismo nivel de aislamiento que existiría en procesos separados, pero sin incurrir en la sobrecarga adicional de hacer llamadas de proceso cruzado o cambio entre procesos.

Me gustaría saber más sobre cómo/por qué uno realmente usaría varios AppDomains en su aplicación. ¿Alguien puede dar un ejemplo con fragmentos de código reales?

Respuesta

3

He utilizado este en el siguiente contexto (no tiene a mano el código conmigo en este momento para publicar)

  • Crear un nuevo dominio de aplicación (por ejemplo appDomainX)
  • Crear una nueva instancia de una objetar el uso de este nuevo dominio
  • el nuevo objeto (vivido en el nuevo objeto) carga un montón de asambleas
  • reflexionar sobre ellos para recoger algunas métricas
  • obtener el resultado producido
  • Unload appDomainX

El beneficio de esto es que se puede descargar ensamblados cargados en el dominio de aplicación de nueva creación. Si está haciendo esto en su AppDomain principal una y otra vez cargando más ensambles, su AppDomain crecerá monstruosamente. La creación de un AppDomain separado le permite descargar después de cada inspección, que a su vez descarga todos los ensamblajes cargados en ese dominio, por lo tanto, el AppDomain principal permanece limpio.

1

trabajé en una pieza de software (en su mayoría) C++ que permite a los usuarios escribir guiones para automatizar la aplicación usando C#, VB.NET o. La aplicación también tenía algunos de sus componentes escritos en C#. Usó un AppDomain para los componentes del programa, y ​​otro para la zona de pruebas de los scripts.

La implementación original de scripts creó un AppDomain para cada script, pero resultó ser demasiado lento y evitó algunos comportamientos de script útiles, por lo que acudimos a un único dominio de aplicación para el motor de scripts.

1

Es posible que desee utilizar uno para simular el procesamiento de IIS. Necesitas un proceso de larga ejecución que pierda memoria. Puede realizar un seguimiento de cuántas solicitudes en AD se han procesado y una vez que alcanza un umbral, active una nueva. Cuando el anterior haya terminado todo el proceso, descárguelo y deje que el CLR limpie parte de la basura de la aplicación.

No me preguntes cómo sé esto. :)

También puede hacer esto si desea ejecutar código en diferentes contextos de seguridad.

Cuestiones relacionadas