75 votes

Utilisation de AppDomain en C #

Quelle est l'utilisation la plus importante d'AppDomains en C #?

80voto

Marc Gravell Points 482669

Le plus important de l'utiliser, c'est que votre code doit avoir un - c'est à dire tout ce que vous écrivez en C# exécute dans un AppDomain. C'est très important ;-p

Si tu veux supplémentaires app-domaines:

Lors de l'utilisation de plugins et autres code non sécurisé, il vous permet à la fois de l'isolement, et la capacité à les décharger (vous ne pouvez pas décharger assemblées - seulement l'ensemble des app-domaines).

Je l'utilise actuellement pour charger dynamiquement généré dll, afin que je puisse les décharger.

Ils vous permettent également de définir les différents fichiers de configuration, les niveaux de confiance, etc - mais ont un coût de la complexité et de l'accès distant.

MSDN a une section sur l'app-domaines, ici.

30voto

Brian Rasmussen Points 68853

Je ne peux pas vous dire ce que l'utilisation la plus importante est, puisque cela dépend de la situation.

Domaines d'application sont utiles pour le bac à sable parties de votre application. Vous pouvez charger des extensions dans un domaine d'application et les décharger à nouveau - quelque chose que vous ne pouvez pas faire autrement. Vous pouvez attribuer des droits spécifiques à des domaines d'application. Par défaut, les objets dans différents domaines d'application ne peut pas accéder les uns des autres.

Domaines d'application peuvent être considérés comme des processus légers car ils vous donnent un grand nombre des mêmes caractéristiques. Toutefois, contrairement à un Processus de nouveaux domaines d'application n'ont pas leur propre thread par défaut. Vous avez à gérer les domaines d'application et fils vous-même.

Aussi, les domaines d'application tous partagent le même tas managé. Ce n'est généralement pas un problème, mais il peut avoir des effets surprenants comme certains cas comme les chaînes sont partagés entre les domaines d'application. Pour une utilisation régulière que ce n'est pas un problème, mais si vous utilisez des chaînes pour le verrouillage, les threads dans différents domaine d'application peuvent s'influencer les uns les autres.

23voto

Hoghweed Points 1263

En général, il n'est pas si quotidien pratique de codage d'utilisation domaines d'application, cela pourrait être considéré comme quelque chose comme un concept avancé.. mais, à partir de cette simple chose, il est important de mieux comprendre les concepts derrière le mot "domaine d'application".

En termes d'architecture, et simple que possible, un domaine d'application est un isolement conteneur de même en termes de mémoire d'adressage à l'intérieur de toutes les assemblées requises par une application est chargé et exécuté, même si ce concept est plus compliqué à expliquer dans les détails (j'espère que c'est pas à propos de votre question va donc plus profond).

A partir de là, le domaine d'application de la classe de première de toutes est utilisé pour obtenir l'accès à l'application, l'exécution de domaine d'application, ce qui pourrait être fait viea le Singleton propriété de la mise en œuvre

Domaine d'application.CurrentDomain

de cette manière, il est possible de:

  1. d'obtenir l'accès à la chargé assemblées
  2. obtenir l'accès au domaine d'application-données partagées fentes
  3. intems regroupement, en termes de déroulement de la créé les instances chargées assemblées créé domaines

Ensuite, le domaine d'application de classe est utilisé pour:

  1. créer plusieurs "domaines" dans le même processus
  2. l'exécution des assemblages dans le processus de
  3. gérer le domaine d'application du chargement/déchargement

Il pourrait être utile de prendre un point de vue du code de la nouvelle Microsoft framework (pas encore publié) MEF (Géré Extesibility Cadre) qui est vraiment basée sur des concepts comme domaines d'application créations et le déchargement, chargement dynamique des assemblages.

Comme exemple simple des choses et des exemples de ce que vous pouvez faire avec des domaines d'application, je peux partager ce lien.

J'espère que j'ai répondu à votre question

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