82 votes

Qu'est-ce qu'un domaine d'application .NET ?

En particulier, quelles sont les implications de l'exécution du code dans deux domaines d'application différents ?

Comment les données sont-elles normalement transmises à travers la frontière du domaine d'application ? Est-ce la même chose que de faire passer des données à travers la frontière du processus ? Je suis curieux d'en savoir plus sur cette abstraction et sur son utilité.

EDITAR: Bonne couverture existante de la classe AppDomain en général à l'adresse http://stackoverflow.com/questions/622516/i-dont-understand-appdomains

75voto

Reed Copsey Points 315315

Un site AppDomain fournit essentiellement une région isolée dans laquelle le code s'exécute à l'intérieur d'un processus.

Une manière simple d'y penser est presque comme un processus plus léger assis à l'intérieur de votre processus principal. Chaque domaine d'application existe à l'intérieur d'un processus de manière totalement isolée, ce qui vous permet d'exécuter du code en toute sécurité (il peut être déchargé sans démolir le processus entier si nécessaire), avec une sécurité séparée, etc.

Pour ce qui est de vos spécificités, si vous exécutez du code dans 2 AppDomains différents au sein d'un processus, le code sera exécuté de manière isolée. Toute communication entre les domaines d'application sera soit sérialisée, soit gérée via MarshallByRefObject. Le comportement est très proche de celui de l'utilisation du remoting à cet égard. Cela offre une sécurité énorme - vous pouvez exécuter du code auquel vous ne faites pas confiance, et s'il fait quelque chose de mal, cela ne vous affectera pas.

Il y a beaucoup plus de détails dans la description de MSDN de Domaines d'application .

20voto

nikmd23 Points 5780

Il s'agit d'une couche d'isolation fournie par le runtime .NET. En tant que tels, les domaines d'application vivent dans un processus (un processus peut avoir plusieurs domaines d'application) et ont leur propre espace d'adressage virtuel.

Les domaines d'application sont utiles car :

  • Ils sont moins coûteux que les processus complets
  • Ils sont multithreads
  • Vous pouvez en arrêter un sans tout tuer dans le processus.
  • Séparation des ressources/config/etc
  • Chaque domaine d'application fonctionne avec son propre niveau de sécurité

1voto

Ziaullah Khan Points 146

Si vous le regardez du point de vue des détails internes du processeur, il définit une valeur différente pour le registre du segment de code (le CS). Le code et le registre CS:IP (Instruction Pointer) sont ceux qui sont en cours d'exécution par le processeur.

(Par souci de brièveté, j'ai choisi de ne pas aborder la discussion relative aux tables des pages).

AppDomain marque cette limite. pour la sécurité du code.

La raison pour laquelle nous donnons ce contexte est de nous débarrasser des questions de ce genre : 1. comment pouvons-nous accéder à une ressource à travers deux domaines d'application (oui, en utilisant des tuyaux ou d'autres mécanismes de partage, mais pas directement, car CS:IP ne peut pas être défini sur un autre domaine d'application. C'est seulement le système d'exploitation qui peut le faire. Pas le CLR)

  1. Pourrait-il y avoir plusieurs fils dans le domaine de l'application. Techniquement oui, car la valeur CS sera dans le processus actuel. Vous pouvez changer l'IP en quelque chose d'autre par une déclaration de saut (combinaison appel de fonction/goto).

  2. deux threads dans deux domaines d'application différents peuvent-ils communiquer (non, voir point 1) ?

  3. Deux threads d'un même domaine d'application peuvent-ils communiquer (oui, voir point 2) ?

plusieurs autres combin combinaisons de ces cas pourraient répondre à peu de connaissances sur le fonctionnement de CS:IP.

0voto

Afazal Points 21

Chaque application fonctionnant dans un processus, AppDomain est aussi un processus léger ou nous pouvons dire une unité logique qui a un groupe d'assemblages (c'est un conteneur qui contient un groupe d'assemblages) et ceci existe à l'intérieur du processus au niveau d'isolation du même processus, ceci permet d'exécuter plusieurs assemblages dans le même processus et les empêche d'avoir un accès direct.

Exécution d'une application Dot Net au sein d'un AppDomain : Une fois qu'une application point net est exécutée, le shell du système d'exploitation charge le CLR dans un processus et un nouveau domaine d'application est créé dans le même processus et charge tous les assemblages dans le domaine d'application créé, maintenant le code du domaine d'application sera exécuté.

Quand personnaliser l'AppDomain : Nous pouvons créer notre propre AppDomain, maintenant la chose est dans quel scénario nous pouvons créer notre propre AppDomain. Supposons que le temps d'exécution nous avons besoin d'ajouter ou de supprimer les assemblages sans interruption de l'application en cours d'exécution alors nous pouvons créer notre propre AppDomain.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X