Domaines d'applicationApplication domains

Les systèmes d'exploitation et les environnements d'exécution assurent généralement une certaine forme d'isolation entre les applications.Operating systems and runtime environments typically provide some form of isolation between applications. Par exemple, Windows utilise des processus pour isoler des applications.For example, Windows uses processes to isolate applications. Cette isolation est nécessaire pour que le code en cours d'exécution dans une application ne puisse pas affecter de manière négative d'autres applications non liées.This isolation is necessary to ensure that code running in one application cannot adversely affect other, unrelated applications.

Les domaines d'application fournissent une limite d'isolation pour la sécurité, la fiabilité, le suivi des versions et le déchargement des assemblys.Application domains provide an isolation boundary for security, reliability, and versioning, and for unloading assemblies. Les domaines d'application sont généralement créés par des hôtes de runtime qui sont chargés d'initialiser le Common Language Runtime avant l'exécution d'une application.Application domains are typically created by runtime hosts, which are responsible for bootstrapping the common language runtime before an application is run.

Avantages de l'isolation des applicationsThe benefits of isolating applications

Du point de vue historique, les limites de processus ont permis d'isoler les applications en cours d'exécution sur le même ordinateur.Historically, process boundaries have been used to isolate applications running on the same computer. Chaque application est chargée dans un processus distinct, ce qui isole l'application des autres applications en cours d'exécution sur le même ordinateur.Each application is loaded into a separate process, which isolates the application from other applications running on the same computer.

Les applications sont isolées, car les adresses mémoire sont liées au processus ; un pointeur mémoire passé d'un processus à un autre ne peut pas être utilisé d'une manière significative dans le processus cible.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. De plus, vous ne pouvez pas établir d'appels directs entre deux processus.In addition, you cannot make direct calls between two processes. Vous devez à la place utiliser des proxys qui génèrent un niveau d'adressage indirect.Instead, you must use proxies, which provide a level of indirection.

Le code managé doit passer par un processus de vérification avant de pouvoir être exécuté (sauf si l'administrateur a accordé l'autorisation d'ignorer la vérification).Managed code must be passed through a verification process before it can be run (unless the administrator has granted permission to skip the verification). Le processus de vérification détermine si le code peut essayer d'accéder à des adresses mémoire non valides ou effectuer d'autres actions risquant d'empêcher le processus dans lequel il s'exécute de fonctionner correctement.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. Le code qui réussit le test de vérification est considéré comme étant de type sécurisé.Code that passes the verification test is said to be type-safe. La capacité à vérifier si le code est de type sécurisé permet au Common Language Runtime d'assurer un niveau d'isolation aussi élevé que celui de la limite de processus, à un coût de performances beaucoup plus réduit.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.

Les domaines d'application fournissent une unité de traitement davantage sécurisée et polyvalente que le Common Language Runtime peut utiliser pour assurer l'isolation entre les applications.Application domains provide a more secure and versatile unit of processing that the common language runtime can use to provide isolation between applications. Vous pouvez exécuter plusieurs domaines d'application dans un seul processus avec le même niveau d'isolation que dans des processus distincts, mais sans risquer une surcharge mémoire en établissant des appels interprocessus ou en passant d'un processus à un autre.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 capacité à exécuter plusieurs applications dans un seul processus optimise considérablement l'extensibilité du serveur.The ability to run multiple applications within a single process dramatically increases server scalability.

L'isolation des applications est également importante pour la sécurité des applications.Isolating applications is also important for application security. Par exemple, vous pouvez exécuter des contrôles à partir de plusieurs applications Web dans un seul processus de navigateur, de telle sorte que les contrôles ne puissent pas accéder à leurs données et à leurs ressources respectives.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'isolation assurée par les domaines d'application présente les avantages suivants :The isolation provided by application domains has the following benefits:

  • Les erreurs survenues dans une application ne peuvent pas affecter d'autres applications.Faults in one application cannot affect other applications. Comme le code de type sécurisé ne risque pas de provoquer d'erreurs dans la mémoire, l'utilisation de domaines d'application permet d'empêcher le code en cours d'exécution dans un domaine d'affecter d'autres applications dans le processus.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.

  • Des applications individuelles peuvent être arrêtées sans que le processus entier soit arrêté.Individual applications can be stopped without stopping the entire process. L'utilisation des domaines d'application vous permet de décharger le code en cours d'exécution dans une seule application.Using application domains enables you to unload the code running in a single application.

    Notes

    Vous ne pouvez pas décharger des assemblys ou des types individuels.You cannot unload individual assemblies or types. Seul un domaine complet peut être déchargé.Only a complete domain can be unloaded.

  • Le code en cours d'exécution dans une application ne peut pas directement accéder au code ou aux ressources d'une autre application.Code running in one application cannot directly access code or resources from another application. Le Common Language Runtime applique cette isolation en empêchant les appels directs entre les objets dans les différents domaines d'application.The common language runtime enforces this isolation by preventing direct calls between objects in different application domains. Les objets qui passent d'un domaine à un autre sont soit copiés, soit accédés par un proxy.Objects that pass between domains are either copied or accessed by proxy. Si l'objet est copié, l'appel à cet objet est alors local.If the object is copied, the call to the object is local. Dans ce cas, l'appelant et l'objet référencé figurent dans le même domaine d'application.That is, both the caller and the object being referenced are in the same application domain. Si l'objet est accédé par un proxy, l'appel à cet objet est alors distant.If the object is accessed through a proxy, the call to the object is remote. Dans ce cas, l'appelant et l'objet référencé figurent dans des domaines d'application différents.In this case, the caller and the object being referenced are in different application domains. Les appels interdomaines utilisent la même infrastructure d'appel distant que les appels entre deux processus ou deux ordinateurs.Cross-domain calls use the same remote call infrastructure as calls between two processes or between two machines. Les métadonnées de l'objet référencé doivent par conséquent être disponibles pour les deux domaines d'application pour que l'appel de méthode puisse faire l'objet d'une compilation JIT correcte.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 le domaine appelant n’a pas accès aux métadonnées pour l’objet qui est appelé, la compilation peut échouer avec une exception de type 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. Pour plus d'informations, consultez Remote Objects.For more information, see Remote Objects. Le mécanisme permettant de déterminer le mode d'accès des objets sur les domaines est défini par l'objet.The mechanism for determining how objects can be accessed across domains is determined by the object. Pour plus d'informations, consultez System.MarshalByRefObject.For more information, see System.MarshalByRefObject.

  • La portée du comportement de code est définie par l'application dans laquelle il s'exécute.The behavior of code is scoped by the application in which it runs. En d'autres termes, le domaine d'application fournit des paramètres de configuration tels que les stratégies de version d'application, l'emplacement des assemblys distants auxquels il accède et des informations sur l'emplacement où se trouvent les assemblys qui sont chargés dans le domaine.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.

  • Les autorisations accordées au code peuvent être contrôlées par le domaine d'application dans lequel le code s'exécute.Permissions granted to code can be controlled by the application domain in which the code is running.

Domaines d’application et assemblysApplication domains and assemblies

Cette section décrit la relation entre les domaines d'application et les assemblys.This section describes the relationship between application domains and assemblies. Vous devez charger un assembly dans un domaine d'application avant de pouvoir exécuter le code qu'il contient.You must load an assembly into an application domain before you can execute the code it contains. L'exécution d'une application standard entraîne le chargement de plusieurs assemblys dans un domaine d'application.Running a typical application causes several assemblies to be loaded into an application domain.

La façon dont un assembly est chargé détermine si son code compilé juste-à-temps (JIT) peut être partagé par plusieurs domaines d'application dans le processus, et si l'assembly peut être déchargé du processus.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 assembly est chargé comme indépendant du domaine, tous les domaines d'application qui partagent le même jeu d'autorisations de sécurité peuvent partager le même code compilé juste-à-temps, ce qui réduit la mémoire requise par l'application.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. Toutefois, l'assembly ne peut jamais être déchargé du processus.However, the assembly can never be unloaded from the process.

  • Si un assembly n'est pas chargé comme indépendant du domaine, il doit être compilé juste-à-temps dans chaque domaine d'application dans lequel il est chargé.If an assembly is not loaded domain-neutral, it must be JIT-compiled in every application domain in which it is loaded. Toutefois, l'assembly peut être déchargé du processus via le déchargement de tous les domaines d'application dans lesquels il est chargé.However, the assembly can be unloaded from the process by unloading all the application domains in which it is loaded.

L'hôte de runtime détermine s'il convient de charger des assemblys comme indépendants du domaine lorsqu'il charge le runtime dans un processus.The runtime host determines whether to load assemblies as domain-neutral when it loads the runtime into a process. Pour les applications managées, appliquez l'attribut LoaderOptimizationAttribute à la méthode de point d'entrée pour le processus et spécifiez une valeur de l'énumération LoaderOptimization associée.For managed applications, apply the LoaderOptimizationAttribute attribute to the entry-point method for the process, and specify a value from the associated LoaderOptimization enumeration. Pour les applications non managées qui hébergent le Common Language Runtime, spécifiez l’indicateur approprié quand vous appelez la méthode Fonction CorBindToRuntimeEx.For unmanaged applications that host the common language runtime, specify the appropriate flag when you call the CorBindToRuntimeEx Function method.

Il existe trois options de chargement des assemblys indépendants du domaine :There are three options for loading domain-neutral assemblies:

  • LoaderOptimization.SingleDomain ne charge aucun assembly comme indépendant du domaine, sauf Mscorlib, qui est toujours chargé comme indépendant du domaine.LoaderOptimization.SingleDomain loads no assemblies as domain-neutral, except Mscorlib, which is always loaded domain-neutral. Ce paramètre est désigné par « domaine unique », car il est fréquemment utilisé lorsque l'hôte n'exécute qu'une seule application dans le processus.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 charge tous les assemblys comme indépendants du domaine.LoaderOptimization.MultiDomain loads all assemblies as domain-neutral. Utilisez ce paramètre lorsque plusieurs domaines d'application figurent dans le processus et qu'ils exécutent tous le même code.Use this setting when there are multiple application domains in the process, all of which run the same code.

  • LoaderOptimization.MultiDomainHost charge les assemblys avec nom fort comme indépendants du domaine s'ils ont été installés, ainsi que toutes leurs dépendances, dans le 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. Les autres assemblys sont chargés et compilés juste-à-temps séparément pour chaque domaine d'application dans lequel ils sont chargés, et peuvent donc être déchargés du processus.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. Utilisez ce paramètre lors de l'exécution de plusieurs applications dans le même processus, ou si vous disposez d'un mélange d'assemblys partagés par de nombreux domaines d'application et d'assemblys qui doivent être déchargés du processus.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.

Le code compilé juste-à-temps ne peut pas être partagé pour les assemblys chargés dans le contexte de chargement, à l'aide de la méthode LoadFrom de la classe Assembly, ou chargés à partir d'images à l'aide de surcharges de la méthode Load qui spécifient des tableaux d'octets.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.

Les assemblys, compilés en code natif à l’aide de Ngen.exe (le générateur d’images natives), peuvent être partagés entre des domaines d’application s’ils sont chargés comme indépendants du domaine lors de leur premier chargement dans un processus.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.

Le code compilé juste-à-temps pour l'assembly contenant le point d'entrée de l'application est partagé uniquement si toutes ses dépendances peuvent être partagées.JIT-compiled code for the assembly that contains the application entry point is shared only if all its dependencies can be shared.

Un assembly indépendant du domaine peut être compilé juste-à-temps plusieurs fois.A domain-neutral assembly can be JIT-compiled more than once. Par exemple, lorsque les jeux d'autorisations de sécurité de deux domaines d'application sont différents, ils ne peuvent pas partager le même code compilé juste-à-temps.For example, when the security grant sets of two application domains are different, they cannot share the same JIT-compiled code. Toutefois, chaque copie de l'assembly compilé juste-à-temps peut être partagée avec d'autres domaines d'application disposant du même jeu d'autorisations.However, each copy of the JIT-compiled assembly can be shared with other application domains that have the same grant set.

Lorsque vous décidez de charger des assemblys comme indépendants du domaine, vous devez trouver un compromis entre la réduction de l'utilisation de la mémoire et d'autres facteurs de performances.When you decide whether to load assemblies as domain-neutral, you must make a tradeoff between reducing memory use and other performance factors.

  • L'accès aux données et méthodes statiques est plus lent pour les assemblys indépendants du domaine en raison de la nécessité d'assurer l'isolation des assemblys.Access to static data and methods is slower for domain-neutral assemblies because of the need to isolate assemblies. Chaque domaine d'application qui accède à l'assembly doit disposer d'une copie distincte des données statiques, afin d'éviter que des références à des objets dans les champs statiques ne franchissent les limites de domaine.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. Le runtime contient par conséquent une logique supplémentaire pour orienter un appelant vers la copie appropriée des données statiques ou de la méthode statique.As a result, the runtime contains additional logic to direct a caller to the appropriate copy of the static data or method. Cette logique supplémentaire ralentit l'appel.This extra logic slows down the call.

  • Toutes les dépendances d'un assembly doivent être localisées et chargées lorsque l'assembly est chargé comme indépendant du domaine, car une dépendance qui ne peut pas être chargée comme indépendante du domaine empêche le chargement de l'assembly comme indépendant du domaine.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.

Domaines d'application et threadsApplication domains and threads

Un domaine d'application forme une limite d'isolation pour la sécurité, le suivi des versions, la fiabilité et le déchargement de code managé.An application domain forms an isolation boundary for security, versioning, reliability, and unloading of managed code. Un thread constitue la construction du système d'exploitation utilisée par le Common Language Runtime pour exécuter le code.A thread is the operating system construct used by the common language runtime to execute code. Au moment de l'exécution, l'ensemble du code managé est chargé dans un domaine d'application et exécuté par un ou plusieurs threads managés.At run time, all managed code is loaded into an application domain and is run by one or more managed threads.

Il n'existe pas de corrélation un-à-un entre les domaines d'application et les threads.There is not a one-to-one correlation between application domains and threads. Plusieurs threads peuvent s'exécuter dans un seul domaine d'application à tout moment donné et un thread particulier n'est pas limité à un seul domaine d'application.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 d'autres termes, les threads sont libres de franchir les limites de domaine d'application et un nouveau n'est pas créé pour chaque domaine d'application.That is, threads are free to cross application domain boundaries; a new thread is not created for each application domain.

À tout moment donné, chaque thread s'exécute dans un domaine d'application.At any given time, every thread executes in an application domain. Aucun, un ou plusieurs threads peuvent s'exécuter dans n'importe quel domaine d'application donné.Zero, one, or multiple threads might be executing in any given application domain. Le runtime assure le suivi des threads s'exécutant dans les domaines d'application.The runtime keeps track of which threads are running in which application domains. Vous pouvez rechercher le domaine dans lequel un thread s'exécute à tout moment en appelant la méthode Thread.GetDomain.You can locate the domain in which a thread is executing at any time by calling the Thread.GetDomain method.

Domaines d'application et culturesApplication domains and cultures

La culture, représentée par un objet CultureInfo, est associée aux threads.Culture, which is represented by a CultureInfo object, is associated with threads. Vous pouvez obtenir la culture associée au thread en cours d'exécution à l'aide de la propriété CultureInfo.CurrentCulture et vous pouvez obtenir ou définir la culture associée au thread en cours d'exécution à l'aide de la propriété 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. Si la culture associée à un thread a été définie explicitement à l'aide de la propriété Thread.CurrentCulture, elle continue d'être associée à ce thread lorsque le thread traverse les limites du domaine d'application.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. Sinon, la culture associée au thread à un moment donné est déterminée par la valeur de la propriété CultureInfo.DefaultThreadCurrentCulture dans le domaine d'application dans lequel le thread s'exécute :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 la valeur de la propriété n'est pas null, la culture retournée par la propriété est associée au thread (et, par conséquent, retournée par les propriétés Thread.CurrentCulture et 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 la valeur de la propriété est null, la culture système en cours est associée au thread.If the value of the property is null, the current system culture is associated with the thread.

Programmation avec des domaines d’applicationProgramming with application domains

Les domaines d'application sont généralement créés et manipulés par programme par des hôtes de runtime.Application domains are usually created and manipulated programmatically by runtime hosts. Toutefois, un programme d'application peut parfois souhaiter travailler également avec des domaines d'application.However, sometimes an application program might also want to work with application domains. Par exemple, un programme d'application pourrait charger un composant d'application dans un domaine pour pouvoir décharger le domaine (et le composant) sans devoir arrêter l'application entière.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 classe AppDomain est l’interface de programmation des domaines d’application.The AppDomain is the programmatic interface to application domains. Cette classe inclut des méthodes permettant de créer et de décharger des domaines, de créer des instances de types dans des domaines et de s'inscrire pour différentes notifications telles que le déchargement du domaine d'application.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. Le tableau suivant répertorie les méthodes AppDomain fréquemment utilisées.The following table lists commonly used AppDomain methods.

Méthode AppDomainAppDomain Method DescriptionDescription
CreateDomain Crée un nouveau domaine d'application.Creates a new application domain. Il est recommandé d'utiliser une surcharge de cette méthode qui spécifie un objet AppDomainSetup.It is recommended that you use an overload of this method that specifies an AppDomainSetup object. C'est la manière recommandée pour définir les propriétés d'un nouveau domaine, à savoir la base de l'application ou le répertoire racine pour l'application, l'emplacement du fichier de configuration pour le domaine et le chemin de recherche utilisé par le Common Language Runtime pour charger les assemblys dans le domaine.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 et ExecuteAssemblyByNameExecuteAssembly and ExecuteAssemblyByName Exécute un assembly dans le domaine d'application.Executes an assembly in the application domain. Il s'agit d'une méthode d'instance, qui peut donc être utilisée pour exécuter du code dans un autre domaine d'application pour lequel vous avez une référence.This is an instance method, so it can be used to execute code in another application domain to which you have a reference.
CreateInstanceAndUnwrap Crée une instance du type spécifié dans le domaine d'application, et retourne un proxy.Creates an instance of a specified type in the application domain, and returns a proxy. Utilisez cette méthode pour éviter de charger l'assembly qui contient le type créé dans l'assembly appelant.Use this method to avoid loading the assembly containing the created type into the calling assembly.
Unload Effectue un arrêt approprié du domaine.Performs a graceful shutdown of the domain. Le domaine d'application n'est pas déchargé tant que tous les threads en cours d'exécution dans le domaine ne sont pas arrêtés ou ne figurent plus dans le domaine.The application domain is not unloaded until all threads running in the domain have either stopped or are no longer in the domain.

Notes

Le Common Language Runtime ne prend pas en charge la sérialisation de méthodes globales ; les délégués ne peuvent donc pas être utilisés pour exécuter des méthodes globales dans d'autres domaines d'application.The common language runtime does not support serialization of global methods, so delegates cannot be used to execute global methods in other application domains.

Les interfaces non managées décrites dans la spécification sur les interfaces d'hébergement du Common Language Runtime permettent également d'accéder aux domaines d'application.The unmanaged interfaces described in the common language runtime Hosting Interfaces Specification also provide access to application domains. Les hôtes de runtime peuvent utiliser des interfaces à partir d'un code non managé pour créer des domaines d'application dans un processus et y accéder.Runtime hosts can use interfaces from unmanaged code to create and gain access to the application domains within a process.

La variable d'environnement COMPLUS_LoaderOptimizationThe COMPLUS_LoaderOptimization environment variable

Variable d'environnement qui définit la stratégie d'optimisation de chargeur par défaut d'une application exécutable.An environment variable that sets the default loader optimization policy of an executable application.

SyntaxeSyntax

COMPLUS_LoaderOptimization = 1  

RemarquesRemarks

Une application typique charge plusieurs assemblys dans un domaine d'application avant que le code qu'ils contiennent ne puisse être exécuté.A typical application loads several assemblies into an application domain before the code they contain can be executed.

La façon dont l'assembly est chargé détermine si son code compilé juste-à-temps (JIT) peut être partagé par plusieurs domaines d'application dans le processus.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 assembly est chargé indépendamment du domaine, tous les domaines d'application qui partagent le même jeu d'autorisations de sécurité peuvent partager le même code compilé juste-à-temps.If an assembly is loaded domain-neutral, all application domains that share the same security grant set can share the same JIT-compiled code. Cela réduit la quantité de mémoire requise par l'application.This reduces the memory required by the application.

  • Si un assembly n'est pas chargé indépendamment du domaine, il doit être compilé juste-à-temps dans chaque domaine d'application dans lequel il est chargé et le chargeur ne doit pas partager de ressources internes entre les domaines d'application.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.

Lorsqu'il est défini avec la valeur 1, l'indicateur d'environnement COMPLUS_LoaderOptimization force l'hôte du runtime à charger tous les assemblys d'une manière dépendante du domaine, connue sous le nom de 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 ne charge aucun assembly comme indépendant du domaine, sauf Mscorlib, qui est toujours chargé comme indépendant du domaine.SingleDomain loads no assemblies as domain-neutral, except Mscorlib, which is always loaded domain-neutral. Ce paramètre est désigné par « domaine unique », car il est fréquemment utilisé lorsque l'hôte n'exécute qu'une seule application dans le processus.This setting is called single domain because it is commonly used when the host is running only a single application in the process.

Attention

L'indicateur d'environnement COMPLUS_LoaderOptimization a été conçu pour être utilisé dans les scénarios de diagnostic et de test.The COMPLUS_LoaderOptimization environment flag was designed to be used in diagnostic and test scenarios. L'activation de l'indicateur peut provoquer un net ralentissement et accroître l'utilisation de la mémoire.Having the flag turned on can cause severe slow-down and increase in memory usage.

Exemple de codeCode example

Pour forcer tous les assemblys à ne pas se charger comme indépendants du domaine pour le service IISADMIN, ajoutez COMPLUS_LoaderOptimization=1 à la chaîne de valeur multiple de l'environnement dans la clé 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  

Voir aussiSee also