Dominios de aplicaciónApplication domains

Normalmente, los sistemas operativos y los entornos de Common Language Runtime proporcionan algún tipo de aislamiento entre las aplicaciones.Operating systems and runtime environments typically provide some form of isolation between applications. Por ejemplo, Windows utiliza procesos para aislar las aplicaciones.For example, Windows uses processes to isolate applications. Este aislamiento es necesario para garantizar que el código que se ejecuta en una aplicación no afecta negativamente a otras aplicaciones no relacionadas.This isolation is necessary to ensure that code running in one application cannot adversely affect other, unrelated applications.

Los dominios de aplicación proporcionan un límite de aislamiento para la seguridad, confiabilidad y control de versiones, así como para descargar los ensamblados.Application domains provide an isolation boundary for security, reliability, and versioning, and for unloading assemblies. Los dominios de aplicación suelen ser creados por hosts de motor en tiempo de ejecución, que son los responsables de arrancar automáticamente Common Language Runtime antes de que se ejecute una aplicación.Application domains are typically created by runtime hosts, which are responsible for bootstrapping the common language runtime before an application is run.

Ventajas de aislar aplicacionesThe benefits of isolating applications

Tradicionalmente se han utilizado límites de proceso para aislar las aplicaciones que se ejecutan en un mismo equipo.Historically, process boundaries have been used to isolate applications running on the same computer. Cada aplicación se carga en un proceso independiente que aísla la aplicación de las demás que se estén ejecutando en el mismo equipo.Each application is loaded into a separate process, which isolates the application from other applications running on the same computer.

Las aplicaciones se aíslan porque las direcciones de memoria son específicas de cada proceso; un puntero de memoria pasado de un proceso a otro no se puede utilizar de ninguna manera coherente en el proceso de destino.The applications are isolated because memory addresses are process-relative; a memory pointer passed from one process to another cannot be used in any meaningful way in the target process. Tampoco se pueden realizar llamadas directas entre dos procesos.In addition, you cannot make direct calls between two processes. En su lugar, se deben utilizar servidores proxy, que proporcionan un nivel de direccionamiento indirecto.Instead, you must use proxies, which provide a level of indirection.

El código administrado debe pasar por un proceso de verificación para poder ejecutarse (a menos que el administrador haya concedido permiso para omitir la comprobación).Managed code must be passed through a verification process before it can be run (unless the administrator has granted permission to skip the verification). El proceso de comprobación determina si el código puede intentar el acceso a direcciones de memoria no válidas o realizar alguna otra acción que pudiera hacer que el proceso en el que se ejecuta deje de funcionar correctamente.The verification process determines whether the code can attempt to access invalid memory addresses or perform some other action that could cause the process in which it is running to fail to operate properly. Cuando el código pasa la prueba de comprobación, se dice que tiene seguridad de tipos.Code that passes the verification test is said to be type-safe. La posibilidad de comprobar la seguridad de tipos del código permite que Common Language Runtime proporcione un gran nivel de seguridad respecto a los límites del proceso, con un costo de rendimiento mucho menor.The ability to verify code as type-safe enables the common language runtime to provide as great a level of isolation as the process boundary, at a much lower performance cost.

Los dominios de aplicación constituyen una unidad de procesamiento más segura y versátil que puede utilizar Common Language Runtime para proporcionar el aislamiento entre las aplicaciones.Application domains provide a more secure and versatile unit of processing that the common language runtime can use to provide isolation between applications. En un solo proceso se pueden ejecutar varios dominios de aplicación con el mismo nivel de aislamiento que existiría en procesos independientes, sin incurrir en la sobrecarga adicional que supone realizar llamadas entre procesos o cambiar de un proceso a otro.You can run several application domains in a single process with the same level of isolation that would exist in separate processes, but without incurring the additional overhead of making cross-process calls or switching between processes. La posibilidad de ejecutar múltiples aplicaciones en un solo proceso aumenta la escalabilidad del servidor de manera importante.The ability to run multiple applications within a single process dramatically increases server scalability.

Aislar las aplicaciones es también importante para la seguridad de las mismas.Isolating applications is also important for application security. Por ejemplo, en un solo proceso de explorador se pueden ejecutar controles de varias aplicaciones Web de tal forma que no puedan tener acceso a los datos y recursos de los demás controles.For example, you can run controls from several Web applications in a single browser process in such a way that the controls cannot access each other's data and resources.

Éstas son las ventajas del aislamiento que ofrecen los dominios de aplicación:The isolation provided by application domains has the following benefits:

  • Los errores de una aplicación no pueden afectar a otras aplicaciones.Faults in one application cannot affect other applications. Debido a que el código seguro no puede generar problemas de memoria, el uso de dominios de aplicación garantiza que el código que se ejecute en un dominio no afectará a las demás aplicaciones del proceso.Because type-safe code cannot cause memory faults, using application domains ensures that code running in one domain cannot affect other applications in the process.

  • Es posible detener aplicaciones concretas sin detener todo el proceso.Individual applications can be stopped without stopping the entire process. El uso de dominios de aplicación permite descargar el código que se ejecuta en una sola aplicación.Using application domains enables you to unload the code running in a single application.

    Nota

    No se puede descargar ensamblados o tipos por separado.You cannot unload individual assemblies or types. Sólo se puede descargar un dominio completo.Only a complete domain can be unloaded.

  • El código que se ejecuta en una aplicación no puede tener acceso directo al código o a los recursos de otra aplicación.Code running in one application cannot directly access code or resources from another application. Common Language Runtime impone este aislamiento al impedir que se realicen llamadas directas entre objetos de dominios de aplicación diferentes.The common language runtime enforces this isolation by preventing direct calls between objects in different application domains. Los objetos que se pasan entre dominios se copian o se obtiene acceso a ellos mediante proxy.Objects that pass between domains are either copied or accessed by proxy. Si el objeto se copia, la llamada al objeto es local.If the object is copied, the call to the object is local. En otras palabras, el llamador y el objeto al que se hace referencia se encuentran en el mismo dominio de aplicación.That is, both the caller and the object being referenced are in the same application domain. Si se tiene acceso al objeto a través de un proxy, la llamada al objeto es remota.If the object is accessed through a proxy, the call to the object is remote. En este caso, el llamador y el objeto al que se hace referencia se encuentran en dominios de aplicación diferentes.In this case, the caller and the object being referenced are in different application domains. En las llamadas entre dominios se utiliza la misma infraestructura de llamada remota que en las llamadas entre dos procesos o entre dos equipos.Cross-domain calls use the same remote call infrastructure as calls between two processes or between two machines. En consecuencia, los metadatos del objeto al que se hace referencia deben estar disponibles para ambos dominios de aplicación a fin de que la llamada al método no provoque un error en la compilación JIT.As such, the metadata for the object being referenced must be available to both application domains to allow the method call to be JIT-compiled properly. Si el dominio que llama no tiene acceso a los metadatos del objeto al que se está llamando, se podría producir un error de compilación con una excepción del tipo FileNotFoundException.If the calling domain does not have access to the metadata for the object being called, the compilation might fail with an exception of type FileNotFoundException. Para obtener más información, consulta Remote Objects.For more information, see Remote Objects. El objeto es quien decide el mecanismo para determinar cómo se puede obtener acceso a los objetos entre dominios.The mechanism for determining how objects can be accessed across domains is determined by the object. Para obtener más información, consulta System.MarshalByRefObject.For more information, see System.MarshalByRefObject.

  • La aplicación en la que se ejecuta el código establece el comportamiento del mismo.The behavior of code is scoped by the application in which it runs. En otras palabras, el dominio de aplicación proporciona valores de configuración tales como las directivas de versión de la aplicación, la ubicación de los ensamblados remotos a los que tiene acceso e información sobre dónde encontrar los ensamblados que se cargan en el dominio.In other words, the application domain provides configuration settings such as application version policies, the location of any remote assemblies it accesses, and information about where to locate assemblies that are loaded into the domain.

  • El dominio de aplicación en el que se ejecuta el código puede controlar los permisos que se conceden al código.Permissions granted to code can be controlled by the application domain in which the code is running.

Dominios de aplicación y ensambladosApplication domains and assemblies

En esta sección se describe la relación entre los dominios de aplicación y los ensamblados.This section describes the relationship between application domains and assemblies. Debe cargar un ensamblado en un dominio de aplicación para poder ejecutar el código que contiene.You must load an assembly into an application domain before you can execute the code it contains. Al ejecutar una aplicación típica, se cargan varios ensamblados en un dominio de aplicación.Running a typical application causes several assemblies to be loaded into an application domain.

El modo en que se carga un ensamblado determina si varios dominios de aplicación pueden compartir el código compilado Just-in-time (JIT) del ensamblado en el proceso y si el ensamblado se puede descargar del proceso.The way an assembly is loaded determines whether its just-in-time (JIT) compiled code can be shared by multiple application domains in the process, and whether the assembly can be unloaded from the process.

  • Si un ensamblado se carga con dominio neutro, todos los dominios de aplicación que comparten el mismo conjunto de permisos de seguridad pueden compartir el mismo código compilado JIT, lo que reduce la cantidad de memoria que necesita la aplicación.If an assembly is loaded domain-neutral, all application domains that share the same security grant set can share the same JIT-compiled code, which reduces the memory required by the application. Sin embargo, el ensamblado nunca se puede descargar del proceso.However, the assembly can never be unloaded from the process.

  • Si un ensamblado no se carga con dominio neutro, debe utilizarse la compilación JIT de ese ensamblado en los dominios de aplicación en que se carga.If an assembly is not loaded domain-neutral, it must be JIT-compiled in every application domain in which it is loaded. Sin embargo, el ensamblado se puede descargar del proceso; para ello, tendrán que descargarse todos los dominios de aplicación en que está cargado el ensamblado.However, the assembly can be unloaded from the process by unloading all the application domains in which it is loaded.

El host en tiempo de ejecución determina si los ensamblados se cargan con dominio neutro cuando se carga el motor en tiempo de ejecución en un proceso.The runtime host determines whether to load assemblies as domain-neutral when it loads the runtime into a process. En las aplicaciones administradas, aplique el atributo LoaderOptimizationAttribute al método de punto de entrada del proceso y especifique un valor de la enumeración LoaderOptimization asociada.For managed applications, apply the LoaderOptimizationAttribute attribute to the entry-point method for the process, and specify a value from the associated LoaderOptimization enumeration. En las aplicaciones no administradas que hospedan Common Language Runtime, especifique el marcador adecuado cuando llame al método CorBindToRuntimeEx Function.For unmanaged applications that host the common language runtime, specify the appropriate flag when you call the CorBindToRuntimeEx Function method.

Existen tres opciones para cargar ensamblados neutrales respecto al dominio:There are three options for loading domain-neutral assemblies:

  • LoaderOptimization.SingleDomain no carga ensamblados con dominio neutro, a excepción de Mscorlib que siempre se carga con dominio neutro.LoaderOptimization.SingleDomain loads no assemblies as domain-neutral, except Mscorlib, which is always loaded domain-neutral. Esta configuración se denomina dominio simple porque suele utilizarse cuando el host ejecuta una sola aplicación en el proceso.This setting is called single domain because it is commonly used when the host is running only a single application in the process.

  • LoaderOptimization.MultiDomain carga todos los ensamblados con dominio neutro.LoaderOptimization.MultiDomain loads all assemblies as domain-neutral. Use esta configuración cuando en el proceso haya varios dominios de aplicación que ejecutan el mismo código.Use this setting when there are multiple application domains in the process, all of which run the same code.

  • LoaderOptimization.MultiDomainHost carga con dominio neutro los ensamblados que tienen un nombre seguro si se han instalado junto con todas sus dependencias en la caché global de ensamblados.LoaderOptimization.MultiDomainHost loads strong-named assemblies as domain-neutral, if they and all their dependencies have been installed in the global assembly cache. La carga y la compilación JIT de los demás ensamblados se realiza de forma independiente en cada dominio de aplicación y, por tanto, estos ensamblados pueden descargarse del proceso.Other assemblies are loaded and JIT-compiled separately for each application domain in which they are loaded, and thus can be unloaded from the process. Utilice esta configuración cuando ejecute más de una aplicación en el mismo proceso, o si tiene un grupo heterogéneo de ensamblados compartidos por varios dominios de aplicación y ensamblados que es necesario descargar del proceso.Use this setting when running more than one application in the same process, or if you have a mixture of assemblies that are shared by many application domains and assemblies that need to be unloaded from the process.

El código compilado JIT no se puede compartir en los ensamblados que se cargan en la carga de ensamblado por contexto especificado por el usuario utilizando el método LoadFrom de la clase Assembly, o que se cargan a partir de imágenes que utilizan las sobrecargas del método Load que especifican matrices de bytes.JIT-compiled code cannot be shared for assemblies loaded into the load-from context, using the LoadFrom method of the Assembly class, or loaded from images using overloads of the Load method that specify byte arrays.

Los ensamblados que se han compilado en código nativo utilizando Ngen.exe (Native Image Generator ) se pueden compartir entre dominios de aplicación si la primera vez que se cargaron en un proceso lo hicieron con dominio neutro.Assemblies that have been compiled to native code by using the Ngen.exe (Native Image Generator) can be shared between application domains, if they are loaded domain-neutral the first time they are loaded into a process.

El código compilado JIT del ensamblado que contiene el punto de entrada de la aplicación sólo se puede compartir si pueden hacerlo todas sus dependencias.JIT-compiled code for the assembly that contains the application entry point is shared only if all its dependencies can be shared.

Un ensamblado con dominio neutro puede someterse a la compilación JIT varias veces.A domain-neutral assembly can be JIT-compiled more than once. Por ejemplo, cuando los conjuntos de permisos de seguridad de dos dominios de aplicación son diferentes, no pueden compartir el mismo código compilado JIT.For example, when the security grant sets of two application domains are different, they cannot share the same JIT-compiled code. Sin embargo, cada copia del ensamblado objeto de compilación JIT se puede compartir con otros dominios de aplicación que tengan el mismo conjunto de permisos de seguridad.However, each copy of the JIT-compiled assembly can be shared with other application domains that have the same grant set.

A la hora de determinar si va a cargar los ensamblados con dominio neutro, deberá decidir si prefiere reducir el consumo de memoria u otros factores relativos al rendimiento.When you decide whether to load assemblies as domain-neutral, you must make a tradeoff between reducing memory use and other performance factors.

  • El acceso a los métodos y datos estáticos es más lento en los ensamblados de dominio neutro porque es necesario aislar los ensamblados.Access to static data and methods is slower for domain-neutral assemblies because of the need to isolate assemblies. Cada dominio de aplicación que tiene acceso al ensamblado debe disponer de una copia independiente de los datos estáticos para impedir que las referencias a objetos en los campos estáticos atraviesen los límites del dominio.Each application domain that accesses the assembly must have a separate copy of the static data, to prevent references to objects in static fields from crossing domain boundaries. Como resultado, el motor en tiempo de ejecución contiene lógica adicional para dirigir un llamador a la copia correspondiente del método o los datos estáticos.As a result, the runtime contains additional logic to direct a caller to the appropriate copy of the static data or method. Esta lógica adicional retarda la llamada.This extra logic slows down the call.

  • Todas las dependencias de un ensamblado deben estar presentes y cargarse cuando el ensamblado se carga con dominio neutro, ya que si una dependencia no se puede cargar con dominio neutro, impedirá también que el ensamblado se cargue con dominio neutro.All the dependencies of an assembly must be located and loaded when the assembly is loaded domain-neutral, because a dependency that cannot be loaded domain-neutral prevents the assembly from being loaded domain-neutral.

Dominios de aplicación y subprocesosApplication domains and threads

Un dominio de aplicación constituye un límite de aislamiento para la seguridad, el control de versiones, la confiabilidad y la descarga de código administrado.An application domain forms an isolation boundary for security, versioning, reliability, and unloading of managed code. Los subprocesos son la construcción del sistema operativo que Common Language Runtime utiliza para ejecutar código.A thread is the operating system construct used by the common language runtime to execute code. En tiempo de ejecución, todo el código administrado se carga en un dominio de aplicación y se ejecuta mediante uno o varios subprocesos administrados.At run time, all managed code is loaded into an application domain and is run by one or more managed threads.

No existe una correlación uno a uno entre los dominios de aplicación y los subprocesos.There is not a one-to-one correlation between application domains and threads. En un momento dado haber varios subprocesos ejecutándose en un único dominio de aplicación. Además, cada subproceso concreto no está confinado a un solo dominio de aplicación.Several threads can execute in a single application domain at any given time, and a particular thread is not confined to a single application domain. En otras palabras, los subprocesos pueden cruzar los límites del dominio de aplicación; no se crea un nuevo subproceso para cada dominio de aplicación.That is, threads are free to cross application domain boundaries; a new thread is not created for each application domain.

En un momento dado, todos los subprocesos se ejecutan en un dominio de aplicación.At any given time, every thread executes in an application domain. Por tanto, podría haber cero, uno o varios subprocesos ejecutándose en un dominio de aplicación determinado.Zero, one, or multiple threads might be executing in any given application domain. El entorno de ejecución realiza un seguimiento de qué subprocesos se están ejecutando en qué dominios de aplicación.The runtime keeps track of which threads are running in which application domains. Se puede localizar en cualquier momento el dominio donde se está ejecutando un subproceso llamando al método Thread.GetDomain.You can locate the domain in which a thread is executing at any time by calling the Thread.GetDomain method.

Dominios de aplicación y referencias culturalesApplication domains and cultures

La referencia cultural, representada por un objeto CultureInfo, se asocia con subprocesos.Culture, which is represented by a CultureInfo object, is associated with threads. Puede obtener la referencia cultural asociada al subproceso que está actualmente en ejecución utilizando la propiedad CultureInfo.CurrentCulture, y puede utilizar la propiedad Thread.CurrentCulture para obtener o establecer la referencia cultural asociada al subproceso que está actualmente en ejecución.You can get the culture that is associated with the currently executing thread by using the CultureInfo.CurrentCulture property, and you can get or set the culture that is associated with the currently executing thread by using the Thread.CurrentCulture property. Si la referencia cultural asociada a un subproceso se ha establecido explícitamente mediante la propiedad Thread.CurrentCulture, seguirá asociada a ese subproceso cuando el subproceso cruce los límites del dominio de aplicación.If the culture that is associated with a thread has been explicitly set by using the Thread.CurrentCulture property, it continues to be associated with that thread when the thread crosses application domain boundaries. De lo contrario, la referencia cultural que estaba asociada al subproceso en un momento concreto vendrá determinada por el valor de la propiedad CultureInfo.DefaultThreadCurrentCulture en el dominio de aplicación en el que se está ejecutando el subproceso:Otherwise, the culture that is associated with the thread at any given time is determined by the value of the CultureInfo.DefaultThreadCurrentCulture property in the application domain in which the thread is executing:

  • Si el valor de la propiedad no es null, se asociará al subproceso la referencia cultural devuelta por la propiedad (y por consiguiente devuelta por las propiedades Thread.CurrentCulture y CultureInfo.CurrentCulture).If the value of the property is not null, the culture that is returned by the property is associated with the thread (and therefore returned by the Thread.CurrentCulture and CultureInfo.CurrentCulture properties).

  • Si el valor de la propiedad es null, se asociará al subproceso la referencia cultural actual del sistema.If the value of the property is null, the current system culture is associated with the thread.

Programación con dominios de aplicaciónProgramming with application domains

Normalmente, los dominios de aplicación son creados y manipulados mediante programación por los hosts de motor en tiempo de ejecución.Application domains are usually created and manipulated programmatically by runtime hosts. Sin embargo, a veces, puede darse la circunstancia de que un programa de aplicación deba trabajar con dominios de aplicación.However, sometimes an application program might also want to work with application domains. Por ejemplo, un programa de aplicación podría cargar un componente de aplicación en un dominio para poder descargar el dominio (y el componente) sin necesidad de detener toda la aplicación.For example, an application program could load an application component into a domain to be able to unload the domain (and the component) without having to stop the entire application.

La AppDomain es la interfaz de programación para los dominios de aplicación.The AppDomain is the programmatic interface to application domains. Esta clase incluye métodos para crear y descargar dominios, crear instancias de tipos en dominios y registrar diversas notificaciones, como por ejemplo cuando una aplicación descarga un dominio.This class includes methods to create and unload domains, to create instances of types in domains, and to register for various notifications such as application domain unloading. En la tabla siguiente, se presentan los métodos AppDomain más usados.The following table lists commonly used AppDomain methods.

Método de AppDomainAppDomain Method DescripciónDescription
CreateDomain Crea un nuevo dominio de aplicación.Creates a new application domain. Se recomienda utilizar una sobrecarga de este método que especifique un objeto AppDomainSetup.It is recommended that you use an overload of this method that specifies an AppDomainSetup object. Ésta es la forma recomendada para establecer las propiedades de un nuevo dominio, como la base de la aplicación o el directorio raíz para la aplicación; la ubicación del archivo de configuración para el dominio; y la ruta de búsqueda que va a utilizar Common Language Runtime para cargar ensamblados en el dominio.This is the preferred way to set the properties of a new domain, such as the application base, or root directory for the application; the location of the configuration file for the domain; and the search path that the common language runtime is to use to load assemblies into the domain.
ExecuteAssembly y ExecuteAssemblyByNameExecuteAssembly and ExecuteAssemblyByName Ejecuta un ensamblado en el dominio de aplicación.Executes an assembly in the application domain. Éste es un método de instancia, por lo que se puede utilizar para ejecutar el código en otro dominio de aplicación al que se haga referencia.This is an instance method, so it can be used to execute code in another application domain to which you have a reference.
CreateInstanceAndUnwrap Crea una instancia de un tipo especificado en el dominio de aplicación y devuelve un proxy.Creates an instance of a specified type in the application domain, and returns a proxy. Utilice este método para evitar que se cargue el ensamblado que contiene el tipo creado en el ensamblado de llamada.Use this method to avoid loading the assembly containing the created type into the calling assembly.
Unload Cierra el dominio correctamente.Performs a graceful shutdown of the domain. El dominio de aplicación no se descarga hasta que todos los subprocesos que se están ejecutando en el dominio se hayan detenido o ya no se encuentren en el dominio.The application domain is not unloaded until all threads running in the domain have either stopped or are no longer in the domain.

Nota

Common Language Runtime no admite la serialización de métodos globales, por lo que no se pueden utilizar los delegados para ejecutar métodos globales en otros dominios de aplicación.The common language runtime does not support serialization of global methods, so delegates cannot be used to execute global methods in other application domains.

Las interfaces no administradas que se describen en la especificación de las interfaces de hospedaje de Common Language Runtime también proporcionan acceso a los dominios de aplicación.The unmanaged interfaces described in the common language runtime Hosting Interfaces Specification also provide access to application domains. Los hosts de motor en tiempo de ejecución pueden usar interfaces de código no administrado para crear y obtener acceso a los dominios de aplicación en un proceso.Runtime hosts can use interfaces from unmanaged code to create and gain access to the application domains within a process.

COMPLUS_LoaderOptimization (Variable de entorno)The COMPLUS_LoaderOptimization environment variable

Variable de entorno que establece la directiva predeterminada de optimización de cargador de una aplicación ejecutable.An environment variable that sets the default loader optimization policy of an executable application.

SintaxisSyntax

COMPLUS_LoaderOptimization = 1  

ComentariosRemarks

Una aplicación típica carga varios ensamblados en un dominio de aplicación antes de poder ejecutar el código que contienen.A typical application loads several assemblies into an application domain before the code they contain can be executed.

La manera en que se carga el ensamblado determina si su código compilado Just-In-Time (JIT) se puede compartir entre varios dominios de aplicación del proceso.The way the assembly is loaded determines whether its just-in-time (JIT) compiled code can be shared by multiple application domains in the process.

  • Si un ensamblado se carga con dominio neutro, todos los dominios de aplicación que comparten el mismo conjunto de permisos de seguridad pueden compartir el mismo código compilado JIT.If an assembly is loaded domain-neutral, all application domains that share the same security grant set can share the same JIT-compiled code. Esto reduce la cantidad de memoria que necesita la aplicación.This reduces the memory required by the application.

  • Si un ensamblado no se carga con dominio neutro, debe someterse a la compilación JIT en cada dominio de aplicación en el que se carga y el cargador no debe compartir recursos internos entre dominios de aplicación.If an assembly is not loaded domain-neutral, it must be JIT-compiled in every application domain in which it is loaded and the loader must not share internal resources across application domains.

Cuando se establece en 1, la marca de entorno COMPLUS_LoaderOptimization obliga al host del runtime a cargar todos los ensamblados de una manera no neutra para el dominio que se conoce como SingleDomain.When set to 1, the COMPLUS_LoaderOptimization environment flag forces the runtime host to load all assemblies in non-domain-neutral way known as SingleDomain. SingleDomain no carga ensamblados con dominio neutro, a excepción de Mscorlib, que siempre se carga con dominio neutro.SingleDomain loads no assemblies as domain-neutral, except Mscorlib, which is always loaded domain-neutral. Esta configuración se denomina dominio simple porque suele utilizarse cuando el host ejecuta una sola aplicación en el proceso.This setting is called single domain because it is commonly used when the host is running only a single application in the process.

Precaución

La marca de entorno COMPLUS_LoaderOptimization se diseñó para utilizarse en escenarios de diagnóstico y prueba.The COMPLUS_LoaderOptimization environment flag was designed to be used in diagnostic and test scenarios. Tener la marca activada puede producir una considerable ralentización y un aumento del uso de memoria.Having the flag turned on can cause severe slow-down and increase in memory usage.

Ejemplo de códigoCode example

Si anexa COMPLUS_LoaderOptimization=1 en el valor de cadena múltiple del entorno de la clave HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\IISADMIN, podrá conseguir que no todos los ensamblados se carguen como dominio neutro para el servicio IISADMIN.To force all assemblies not to be loaded as domain-neutral for the IISADMIN service can be achieved by appending COMPLUS_LoaderOptimization=1 to the Environment’s Multi-String Value in the HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\IISADMIN key.

Key = HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\IISADMIN  
Name = Environment  
Type = REG_MULTI_SZ  
Value (to append) = COMPLUS_LoaderOptimization=1  

Vea tambiénSee also