Domini applicazioneApplication Domains

I sistemi operativi e gli ambienti runtime forniscono solitamente una forma di isolamento tra le applicazioni.Operating systems and runtime environments typically provide some form of isolation between applications. Windows, ad esempio, usa i processi per isolare le applicazioni.For example, Windows uses processes to isolate applications. L'isolamento è necessario per garantire che il codice in esecuzione in un'applicazione non interferisca con altre applicazioni non correlate.This isolation is necessary to ensure that code running in one application cannot adversely affect other, unrelated applications.

I domini applicazione forniscono un limite di isolamento per sicurezza, affidabilità e controllo delle versioni, nonché per lo scaricamento degli assembly.Application domains provide an isolation boundary for security, reliability, and versioning, and for unloading assemblies. I domini applicazione vengono solitamente creati dagli host di runtime, che sono responsabili dell'avvio di Common Language Runtime prima dell'esecuzione di un'applicazione.Application domains are typically created by runtime hosts, which are responsible for bootstrapping the common language runtime before an application is run.

Negli argomenti contenuti in questa sezione della documentazione viene illustrato come usare i domini applicazione per fornire un isolamento tra gli assembly.The topics in this section of the documentation explain how to use application domains to provide isolation between assemblies.

In questa panoramica sono incluse le sezioni seguenti:This overview contains the following sections:

Vantaggi dell'isolamento delle applicazioniThe Benefits of Isolating Applications

L'isolamento delle diverse applicazioni in esecuzione sullo stesso computer è sempre stato basato sui limiti dei processi.Historically, process boundaries have been used to isolate applications running on the same computer. Ciascuna applicazione viene caricata in un processo separato che consente di isolarla dalle altre applicazioni in esecuzione.Each application is loaded into a separate process, which isolates the application from other applications running on the same computer.

Le applicazioni risultano isolate perché gli indirizzi di memoria sono relativi ai processi. Un puntatore di memoria passato da un processo a un altro non può essere usato in modo significativo nel processo di destinazione.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. Inoltre, non è possibile effettuare chiamate dirette tra due processi.In addition, you cannot make direct calls between two processes. È invece necessario usare un proxy, che fornisce un livello di riferimento indiretto.Instead, you must use proxies, which provide a level of indirection.

Il codice gestito deve essere sottoposto a verifica prima che sia possibile eseguirlo, a meno che non esista un'apposita autorizzazione dell'amministratore.Managed code must be passed through a verification process before it can be run (unless the administrator has granted permission to skip the verification). Il processo di verifica determina se il codice può tentare di accedere a indirizzi di memoria non validi o eseguire operazioni che potrebbero compromettere il corretto funzionamento del processo in cui è in esecuzione.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. Il codice che supera la verifica viene definito come indipendente dai tipi.Code that passes the verification test is said to be type-safe. La possibilità di verificare che il codice sia indipendente dai tipi consente a Common Language Runtime di fornire un livello di isolamento corrispondente ai limiti del processo, con un'incidenza sulle prestazioni di gran lunga inferiore.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.

I domini applicazione forniscono un'unità di elaborazione più protetta e versatile che può essere usata da Common Language Runtime per fornire isolamento tra le applicazioni.Application domains provide a more secure and versatile unit of processing that the common language runtime can use to provide isolation between applications. In ogni processo è possibile eseguire più domini applicazione con lo stesso livello di isolamento che si ottiene usando processi separati, ma senza l'overhead derivante dalle chiamate tra processi o dal passaggio tra processi.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 possibilità di eseguire più applicazioni all'interno di un singolo processo incrementa considerevolmente la scalabilità.The ability to run multiple applications within a single process dramatically increases server scalability.

L'isolamento delle applicazioni è importante anche per la sicurezza delle applicazioni stesse.Isolating applications is also important for application security. È possibile, ad esempio, eseguire controlli da diverse applicazioni Web in esecuzione in un singolo processo browser, in modo che i controlli non possano accedere alle risorse e ai dati reciproci.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.

L'isolamento fornito dai domini applicazione offre i seguenti vantaggi:The isolation provided by application domains has the following benefits:

  • Gli errori di un'applicazione non possono influire sulle altre applicazioni.Faults in one application cannot affect other applications. Poiché il codice indipendente dai tipi non può provocare errori di memoria, l'utilizzo dei domini applicazione assicura che il codice in esecuzione in un dominio non possa influire sulle altre applicazioni nel processo.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.

  • È possibile arrestare singole applicazioni senza arrestare l'intero processo.Individual applications can be stopped without stopping the entire process. L'utilizzo dei domini applicazione consente di scaricare il codice in esecuzione in una specifica applicazione.Using application domains enables you to unload the code running in a single application.

    Nota

    Non è possibile scaricare singoli assembly o tipi.You cannot unload individual assemblies or types. È possibile scaricare solo un dominio completo.Only a complete domain can be unloaded.

  • Il codice in esecuzione in un'applicazione non può accedere direttamente al codice o alle risorse di un'altra applicazione.Code running in one application cannot directly access code or resources from another application. Common Language Runtime assicura tale isolamento impedendo le chiamate dirette tra gli oggetti appartenenti a domini applicazione diversi.The common language runtime enforces this isolation by preventing direct calls between objects in different application domains. Il passaggio di un oggetto da un dominio all'altro avviene tramite copia o usando un proxy.Objects that pass between domains are either copied or accessed by proxy. Se l'oggetto viene copiato, la chiamata all'oggetto è locale.If the object is copied, the call to the object is local. In altre parole, sia l'oggetto a cui viene fatto riferimento che il chiamante si trovano nello stesso dominio applicazione.That is, both the caller and the object being referenced are in the same application domain. Se si accede all'oggetto tramite un proxy, la chiamata all'oggetto è remota.If the object is accessed through a proxy, the call to the object is remote. In questo caso, l'oggetto a cui viene fatto riferimento e il chiamante si trovano in domini applicazione diversi.In this case, the caller and the object being referenced are in different application domains. Le chiamate tra domini usano la stessa infrastruttura di chiamata remota delle chiamate tra due processi o tra due computer.Cross-domain calls use the same remote call infrastructure as calls between two processes or between two machines. I metadati relativi all'oggetto a cui viene fatto riferimento devono essere pertanto disponibili per entrambi i domini applicazione, affinché il compilatore JIT possa compilare la chiamata in modo corretto.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. Se il dominio chiamante non ha accesso ai metadati per l'oggetto chiamato, la compilazione può avere esito negativo, con un'eccezione di tipo System.IO.FileNotFound.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 System.IO.FileNotFound. Per altri dettagli, vedere Oggetti remoti.See Remote Objects for more details. Il meccanismo che stabilisce in che modo è possibile accedere a un oggetto da un dominio diverso è determinato dall'oggetto.The mechanism for determining how objects can be accessed across domains is determined by the object. Per altre informazioni, vedere System.MarshalByRefObject.For more information, see System.MarshalByRefObject.

  • L'ambito del comportamento del codice viene stabilito dall'applicazione in cui questo è in esecuzione.The behavior of code is scoped by the application in which it runs. In altri termini, il dominio applicazione fornisce impostazioni di configurazione quali i criteri di controllo delle versioni dell'applicazione, la posizione degli assembly remoti a cui questa accede e le informazioni sul percorso degli assembly che vengono caricati nel 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.

  • Le autorizzazioni concesse al codice possono essere controllate dal dominio applicazione in cui il codice è in esecuzione.Permissions granted to code can be controlled by the application domain in which the code is running.

Domini applicazione e assemblyApplication Domains and Assemblies

In questa sezione viene illustrata la relazione tra domini applicazione e assembly.This topic describes the relationship between application domains and assemblies. Per eseguire il codice contenuto in un assembly, è necessario innanzitutto caricare l'assembly in un dominio applicazione.You must load an assembly into an application domain before you can execute the code it contains. L'esecuzione di un'applicazione tipica implica il caricamento di diversi assembly in un dominio applicazione.Running a typical application causes several assemblies to be loaded into an application domain.

Il modo in cui viene caricato un assembly determina se il codice con compilazione JIT può essere condiviso da più domini applicazione nel processo e se l'assembly può essere scaricato dal processo.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.

  • Se un assembly viene caricato come indipendente dal dominio, tutti i domini applicazione che condividono lo stesso insieme di autorizzazioni di sicurezza possono condividere lo stesso codice con compilazione JIT, il che comporta una riduzione della quantità di memoria richiesta dall'applicazione.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. L'assembly tuttavia non può mai essere scaricato dal processo.However, the assembly can never be unloaded from the process.

  • Se non viene caricato come indipendente dal dominio, un assembly deve essere sottoposto a compilazione JIT in ogni dominio applicazione in cui viene caricato.If an assembly is not loaded domain-neutral, it must be JIT-compiled in every application domain in which it is loaded. È tuttavia possibile scaricare l'assembly dal processo scaricando tutti i domini applicazione nei quali è caricato.However, the assembly can be unloaded from the process by unloading all the application domains in which it is loaded.

L'host di runtime determina se caricare gli assembly come indipendenti dal dominio nel momento in cui carica il runtime in un processo.The runtime host determines whether to load assemblies as domain-neutral when it loads the runtime into a process. Per le applicazioni gestite, applicare l'attributo LoaderOptimizationAttribute al metodo del punto di ingresso del processo e specificare un valore dall'enumerazione LoaderOptimization associata.For managed applications, apply the LoaderOptimizationAttribute attribute to the entry-point method for the process, and specify a value from the associated LoaderOptimization enumeration. Per applicazioni non gestite che ospitano Common Language Runtime, specificare il flag appropriato quando si chiama il metodo CorBindToRuntimeEx.For unmanaged applications that host the common language runtime, specify the appropriate flag when you call the CorBindToRuntimeEx Function method.

Il caricamento di assembly indipendenti dal dominio può avvenire in tre modi:There are three options for loading domain-neutral assemblies:

  • Con l'impostazione LoaderOptimization.SingleDomain non viene caricato alcun assembly come indipendente dal dominio, ad eccezione di Mscorlib, che viene sempre caricato come indipendente dal dominio.LoaderOptimization.SingleDomain loads no assemblies as domain-neutral, except Mscorlib, which is always loaded domain-neutral. Questa impostazione viene denominata a dominio singolo perché viene usata in genere quando sull'host è in esecuzione una sola applicazione nel processo.This setting is called single domain because it is commonly used when the host is running only a single application in the process.

  • Con l'impostazione LoaderOptimization.MultiDomain tutti gli assembly vengono caricati come indipendenti dal dominio.LoaderOptimization.MultiDomain loads all assemblies as domain-neutral. Usare questa impostazione quando nel processo esistono più domini applicazione che eseguono tutti lo stesso codice.Use this setting when there are multiple application domains in the process, all of which run the same code.

  • Con l'impostazione LoaderOptimization.MultiDomainHost vengono caricati come indipendenti dal dominio gli assembly con nome sicuro, purché siano stati installati insieme alle relative dipendenze nella Global Assembly Cache.LoaderOptimization.MultiDomainHost loads strong-named assemblies as domain-neutral, if they and all their dependencies have been installed in the global assembly cache. Gli altri assembly vengono caricati e sottoposti a compilazione JIT separatamente per ogni dominio applicazione in cui sono stati caricati e possono pertanto essere scaricati dal processo.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. Usare questa impostazione se si eseguono più applicazioni nello stesso processo o se si dispone di una combinazione di assembly condivisi da molti domini applicazione e di assembly che devono essere scaricati dal processo.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.

Il codice con compilazione JIT non può essere condiviso per gli assembly caricati nel contesto di origine del caricamento usando il metodo LoadFrom della classe Assembly né può essere caricato da immagini usando overload del metodo Load che specificano matrici di byte.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.

Gli assembly compilati nel codice nativo usando il generatore di immagini native (Ngen.exe) possono essere condivisi tra domini dell'applicazione se sono stati caricati come indipendenti dal dominio la prima volta che sono stati caricati in un processo.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.

Il codice con compilazione JIT per l'assembly contenente il punto di ingresso dell'applicazione è condiviso solo se possono essere condivise tutte le dipendenze.JIT-compiled code for the assembly that contains the application entry point is shared only if all its dependencies can be shared.

Un assembly indipendente dal dominio può essere sottoposto a compilazione JIT più di una volta.A domain-neutral assembly can be JIT-compiled more than once. Se ad esempio gli insiemi di autorizzazioni di sicurezza di due domini applicazione sono diversi, non possono condividere lo stesso codice con compilazione JIT.For example, when the security grant sets of two application domains are different, they cannot share the same JIT-compiled code. Ciascuna copia dell'assembly con compilazione JIT tuttavia può essere condivisa con altri domini applicazione con lo stesso insieme di autorizzazioni.However, each copy of the JIT-compiled assembly can be shared with other application domains that have the same grant set.

Quando si decide se caricare o meno gli assembly come indipendenti dal dominio, è necessario trovare un compromesso tra la riduzione dell'utilizzo di memoria e altri fattori relativi alle prestazioni.When you decide whether to load assemblies as domain-neutral, you must make a tradeoff between reducing memory use and other performance factors.

  • L'accesso a dati e metodi statici è più lento per gli assembly indipendenti dal dominio a causa della necessità di isolare gli assembly.Access to static data and methods is slower for domain-neutral assemblies because of the need to isolate assemblies. Ciascun dominio applicazione che accede all'assembly deve disporre di una copia separata dei dati statici, per evitare che i riferimenti agli oggetti contenuti nei campi statici superino i limiti 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. Il runtime contiene la logica aggiuntiva necessaria per indirizzare un chiamante alla copia appropriata del metodo o dei dati statici.As a result, the runtime contains additional logic to direct a caller to the appropriate copy of the static data or method. Tale logica aggiuntiva rallenta la chiamata.This extra logic slows down the call.

  • Tutte le dipendenze di un assembly devono essere individuate e caricate quando l'assembly viene caricato come indipendente dal dominio, poiché una dipendenza che non può essere caricata come indipendente dal dominio impedisce il caricamento dell'assembly come indipendente dal dominio.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.

Domini applicazione e threadApplication Domains and Threads

Il dominio di un'applicazione costituisce un limite di isolamento per sicurezza, controllo delle versioni, affidabilità e scaricamento di codice gestito.An application domain forms an isolation boundary for security, versioning, reliability, and unloading of managed code. Un thread è il costrutto del sistema operativo usato da Common Language Runtime per eseguire il codice.A thread is the operating system construct used by the common language runtime to execute code. In fase di esecuzione, tutto il codice gestito viene caricato in un dominio applicazione ed eseguito da uno o più thread gestiti.At run time, all managed code is loaded into an application domain and is run by one or more managed threads.

Non esiste una relazione uno a uno tra domini applicazione e thread.There is not a one-to-one correlation between application domains and threads. È possibile eseguire diversi thread nello stesso dominio applicazione contemporaneamente e un particolare thread non è confinato a un singolo dominio applicazione.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. I thread possono quindi estendersi oltre i limiti dei domini applicazione. Non viene creato un nuovo thread per ogni dominio applicazione.That is, threads are free to cross application domain boundaries; a new thread is not created for each application domain.

In qualsiasi momento, ogni thread viene eseguito in un dominio applicazione.At any given time, every thread executes in an application domain. In qualsiasi dominio applicazione potrebbero essere in esecuzione zero, uno o più thread.Zero, one, or multiple threads might be executing in any given application domain. Il runtime tiene traccia dei thread in esecuzione nei diversi domini applicazione.The run time keeps track of which threads are running in which application domains. In qualsiasi momento è possibile individuare il dominio in cui un thread viene eseguito chiamando il metodo Thread.GetDomain.You can locate the domain in which a thread is executing at any time by calling the Thread.GetDomain method.

Domini applicazione e impostazioni culturaApplication Domains and Cultures

Le impostazioni cultura, rappresentate da un oggetto CultureInfo, sono associate ai thread.Culture, which is represented by a CultureInfo object, is associated with threads. È possibile ottenere le impostazioni cultura associate al thread attualmente in esecuzione tramite la proprietà CultureInfo.CurrentCulture e ottenere o impostare le impostazioni cultura associate al thread attualmente in esecuzione tramite la proprietà Thread.CurrentCulture.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. Se le impostazioni cultura associate a un thread sono state impostate in modo esplicito tramite la proprietà Thread.CurrentCulture, continueranno a essere associate al thread in questione quando da quest'ultimo vengono superati i limiti del dominio applicazione.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. In caso contrario, le impostazioni cultura associate al thread in un determinato momento sono determinate dal valore della proprietà CultureInfo.DefaultThreadCurrentCulture nel dominio applicazione in cui il thread è in esecuzione: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:

  • Se il valore della proprietà non è null, le impostazioni cultura che vengono restituite dalla proprietà sono associate al thread e pertanto restituite dalle proprietà Thread.CurrentCulture e 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).

  • Se il valore della proprietà è null, le impostazioni cultura correnti del sistema vengono associate al thread.If the value of the property is null, the current system culture is associated with the thread.

Programmazione con i domini applicazioneProgramming with Application Domains

I domini applicazione vengono solitamente creati e modificati direttamente a livello di codice dagli host di runtime.Application domains are usually created and manipulated programmatically by runtime hosts. Tuttavia, anche un programma applicativo può richiedere talvolta l'utilizzo di domini applicazione.However, sometimes an application program might also want to work with application domains. Un programma applicativo, ad esempio, potrebbe caricare il componente di un'applicazione in un dominio per poter scaricare il dominio e il componente senza dover interrompere l'intera applicazione.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 è l'interfaccia che consente di accedere ai domini applicazione a livello di codice.The AppDomain is the programmatic interface to application domains. e include metodi per creare e scaricare domini, per creare istanze di tipi nei domini e per effettuare la registrazione per varie notifiche, come ad esempio quelle per scaricare i domini applicazione.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. La tabella riportata di seguito elenca i metodi di AppDomain comunemente usati.The following table lists commonly used AppDomain methods.

Metodo AppDomainAppDomain Method DescrizioneDescription
CreateDomain Crea un nuovo dominio applicazione.Creates a new application domain. Si consiglia di usare un overload di questo metodo che specifica un oggetto AppDomainSetup.It is recommended that you use an overload of this method that specifies an AppDomainSetup object. Si tratta del sistema preferito per impostare le proprietà di un nuovo dominio, quali la base o la directory radice dell'applicazione, il percorso del file di configurazione del dominio e il percorso di ricerca usato da Common Language Runtime per caricare gli assembly nel 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 e ExecuteAssemblyByNameExecuteAssembly and ExecuteAssemblyByName Esegue un assembly nel dominio applicazione.Executes an assembly in the application domain. Si tratta di un metodo di istanza, pertanto è possibile utilizzarlo per eseguire codice in un altro dominio applicazione per il quale si dispone di un riferimento.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 un'istanza del tipo specificato nel dominio applicazione e restituisce un proxy.Creates an instance of a specified type in the application domain, and returns a proxy. Usando questo metodo è possibile evitare di caricare l'assembly che contiene il tipo creato nell'assembly chiamante.Use this method to avoid loading the assembly containing the created type into the calling assembly.
Unload Esegue un arresto ponderato del dominio.Performs a graceful shutdown of the domain. Il dominio applicazione non viene scaricato fino a quando tutti i thread del dominio non sono stati interrotti o non sono più presenti nel 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

Poiché Common Language Runtime non supporta la serializzazione di metodi globali, non è possibile usare i delegati per eseguire metodi globali in altri domini applicazione.The common language runtime does not support serialization of global methods, so delegates cannot be used to execute global methods in other application domains.

Anche le interfacce non gestite descritte nelle specifiche delle interfacce di hosting di Common Language Runtime forniscono l'accesso ai domini applicazione.The unmanaged interfaces described in the common language runtime Hosting Interfaces Specification also provide access to application domains. Gli host di runtime possono usare tali interfacce dal codice non gestito per creare i domini applicazione e accedervi nell'ambito di un processo.Runtime hosts can use interfaces from unmanaged code to create and gain access to the application domains within a process.

Variabile di ambiente COMPLUS_LoaderOptimizationCOMPLUS_LoaderOptimization Environment Variable

Variabile di ambiente tramite cui vengono impostati i criteri predefiniti di ottimizzazione del caricatore di un'applicazione eseguibile.An environment variable that sets the default loader optimization policy of an executable application.

SintassiSyntax

COMPLUS_LoaderOptimization = 1  

NoteRemarks

Tramite un'applicazione tipica vengono caricati diversi assembly in un dominio applicazione prima che il codice in essi contenuto possa essere eseguito.A typical application loads several assemblies into an application domain before the code they contain can be executed.

Il modo in cui viene caricato l'assembly determina se il codice con compilazione JIT può essere condiviso da più domini applicazione nel processo.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.

  • Se un assembly viene caricato come indipendente dal dominio, tutti i domini applicazione che condividono lo stesso set di autorizzazioni di sicurezza possono condividere lo stesso codice compilato tramite 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. In questo modo, la memoria richiesta dall'applicazione viene ridotta.This reduces the memory required by the application.

  • Se un assembly non viene caricato come indipendente dal dominio, deve essere compilato tramite JIT in ogni dominio applicazione in cui viene caricato e da parte del caricatore non devono essere condivise le risorse interne tra domini applicazione.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.

Se impostato su 1, tramite il flag di ambiente COMPLUS_LoaderOptimization viene forzato il caricamento di tutti gli assembly nella modalità non indipendente dal dominio nota come SingleDomain da parte dell'host di runtime.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. Con SingleDomain non viene caricato alcun assembly come indipendente dal dominio, a eccezione di Mscorlib, che viene sempre caricato come indipendente dal dominio.SingleDomain loads no assemblies as domain-neutral, except Mscorlib, which is always loaded domain-neutral. Questa impostazione viene denominata a dominio singolo perché viene usata in genere quando sull'host è in esecuzione una sola applicazione nel processo.This setting is called single domain because it is commonly used when the host is running only a single application in the process.

Attenzione

Il flag di ambiente COMPLUS_LoaderOptimization è stato progettato per essere usato negli scenari di test e di diagnostica.The COMPLUS_LoaderOptimization environment flag was designed to be used in diagnostic and test scenarios. L'abilitazione del flag può provocare notevoli rallentamenti e aumentare l'utilizzo della memoria.Having the flag turned on can cause severe slow-down and increase in memory usage.

Esempio di codiceCode Example

Per evitare il caricamento di tutti gli assembly come indipendenti dal dominio per il servizio IISADMIN, aggiungere COMPLUS_LoaderOptimization=1 al valore multistringa dell'ambiente nella chiave HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\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  

RiferimentiReference

System.MarshalByRefObject