Utilisation D'Appdomaine en C#

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

69
demandé sur user 2009-03-20 13:52:40

5 réponses

le unique le plus important utiliser est que votre code doit avoir un - c.-à-d. tout ce que vous écrivez dans C# exécute dans un AppDomain . C'est très important ;-p

si vous voulez dire supplémentaire app-domaines:

lors de l'utilisation de plugins et d'autres codes non fiables, il vous permet à la fois l'isolation, et la possibilité de les décharger (vous ne pouvez pas décharger des assemblages-seulement entiers 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 différents fichiers de configuration, niveaux de confiance, etc - mais ont des coûts associés de complexité et de remoting.

MSDN a une section sur les app-domaines, ici .

73
répondu Marc Gravell 2009-03-20 11:02:05

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

Les Appdomaines

sont utiles pour le bac à sable de votre application. Vous pouvez charger des extensions dans un AppDomain et les décharger à nouveau - ce que vous ne pouvez pas faire autrement. Vous pouvez attribuer des droits spécifiques à AppDomains. Par défaut, les objets D'AppDomains différents ne peuvent pas accéder les uns aux autres.

AppDomains peuvent être considérés comme des processus légers comme ils donnent vous avez un grand nombre des mêmes caractéristiques. Cependant, contrairement à un processus, les nouveaux AppDomains n'ont pas leur propre thread par défaut. Vous devez gérer vous-même les AppDomains et les threads.

aussi, AppDomains tous partagent le même tas géré. Ce n'est généralement pas un problème, mais il peut avoir des effets surprenants car certaines instances comme les chaînes sont partagées entre les AppDomains. Pour une utilisation régulière, ce n'est pas un problème, mais si vous utilisez des chaînes pour le verrouillage, les threads dans différentes Appdomaines peuvent affecter les uns les autres.

29
répondu Brian Rasmussen 2009-03-20 11:03:58

en général, il n'est pas si pratique quotidienne de codage à utiliser AppDomains, cela pourrait être considéré comme quelque chose comme un concept avancé.. mais, à partir de cette chose simple, il est important de mieux comprendre les concepts derrière le mot "AppDomain".

en termes d'architecture, et en prenant simple que possible, un AppDomain est un conteneur d'isolation même en termes d'adressage de mémoire, à l'intérieur de lui tous les assemblages nécessaires à une application sont chargés et exécutés, même si ce concept est plus compliqué à expliquer dans les détails (j'espère que ce n'est pas une question d'aller plus en profondeur).

à partir de là, la classe AppDomain est d'abord utilisée pour obtenir l'accès au domaine d'application d'exécution lié à l'application, ce qui pourrait être fait via L'implémentation de la propriété Singleton AppDomain.CurrentDomain . De cette façon, il est possible de:

  1. obtenir l'accès aux assemblages chargés;
  2. obtenir l'accès au domaine d'application-données partagées machines à sous;
  3. entier marshalling, en termes de décompression des instances créées à partir d'assemblages chargés dans des domaines créés.

ensuite, la classe Appdomaine est utilisée pour:

  1. créer plus de "domaines" dans le même processus;
  2. assemblage d'exécution dans le processus;
  3. gérer le processus de chargement / déchargement de l'appdomaine.

il pourrait être utile de prendre un point de vue du code de la Nouvelle Microsoft framework (pas encore publié) MEF (Managed Extesibility Framework) qui est vraiment basé sur des concepts comme AppDomains créations et décharger, assemblages chargés dynamiquement.

comme un exemple simple des choses et des exemples de ce que vous pouvez faire avec AppDomains, je peux partager ce lien .

j'espère avoir répondu à votre question.

21
répondu Hoghweed 2017-09-02 12:20:37

C# domaine d'application est une portion isolée conteneur à l'intérieur de laquelle .NET code à exécuter. Quand vous lancez un code .NET, il s'exécute toujours dans un appdomain par défaut.

Faire de cette montre de 30 minutes de vidéo youtube qu'est-Ce que C# domaine d'application ? qui explique AppDomain plus en détail.

C# Appdomain

mais laissez-moi encore essayer d'expliquer plus en détail. Disons que vous obtenez un tiers DLL et vous voulez l'utiliser dans votre application. Mais vous doutez également que le tiers peut avoir du code malveillant de sorte que vous voudriez exécuter le DLL tiers dans un environnement contraint. Comme vous ne voulez pas le tiers d'accéder à votre lecteur c: ou supprimer des fichiers et ainsi de suite.

ainsi vous pouvez créer deux AppDomains un qui est pour le tiers et un pour vos propres classes C#. Pour le tiers appdomain vous appliquerez la sécurité contrainte qu'il ne peut pas accéder à C: drive et pour votre C# DLLs vous aurez un domaine app illimité.

7
répondu Shivprasad Koirala 2017-01-04 22:27:33

Merci de lire mon blog pour l'application standard de chargement à l'exécution de Dll et de la croix-communication à l'aide d'domaine d'application. https://blog.vcillusion.co.in/sending-events-through-application-domain-boundary/

  1. run time Loading and uncharging of DLLs : j'ai travaillé sur un projet où les DLLs sont chargés à l'exécution par l'utilisateur, et pendant l'exécution du programme, les méthodes sont exécutées en utilisant la réflexion et déchargées au cours de l'exécution du programme.
  2. Securing my Main Execution Program : nous chargeons la DLL de façon dynamique afin que toute exception qui s'est produite dans cette DLL de façon dynamique n'affecte pas ma Appdomaine principale. En cas de scénarios de corruption, nous avons la possibilité de décharger et de charger efficacement la DLL à nouveau.
  3. Cross-AppDomain Communication : nous pouvons charger dynamiquement deux DLLs à l'exécution dans différents AppDomain et les faire communiquer entre eux.
0
répondu vCillusion 2018-06-02 22:42:48