Quelle est l'utilisation la plus importante d'AppDomains en C #?
Le simple le plus important _ utilisé est que votre code doit avoir un - c’est-à-dire que tout ce que vous écrivez en C # s’exécute dans un AppDomain
. C'est assez important ;-p
Si vous voulez dire autres domaines d'application:
Lorsque vous utilisez des plugins et d'autres codes non fiables, cela vous permet à la fois de vous isoler et de les décharger (vous ne pouvez pas décharger des assemblys, mais uniquement des domaines d'application complets).
Je l'utilise actuellement pour charger des dll générées dynamiquement, afin de pouvoir les décharger.
Ils vous permettent également de définir différents fichiers de configuration, différents niveaux de confiance, etc., mais entraînent des coûts de complexité et d’administration distants.
MSDN a une section sur les domaines d'application, ici .
Je ne peux pas vous dire quelle est l'utilisation la plus importante, car cela dépend de la situation.
Les domaines d'application sont utiles pour la mise en sandbox de certaines parties de votre application. Vous pouvez charger des extensions dans un AppDomain et les décharger à nouveau - chose que vous ne pourriez pas faire autrement. Vous pouvez attribuer des droits spécifiques à AppDomains. Par défaut, les objets de différents domaines d'application ne peuvent pas accéder l'un à l'autre.
Les domaines d'application peuvent être considérés comme des processus légers car ils vous offrent de nombreuses fonctionnalités identiques. Cependant, contrairement à Process, les nouveaux AppDomains ne possèdent pas leur propre thread par défaut. Vous devez gérer AppDomains et les threads vous-même.
De plus, les domaines d'application partagent tous le même segment géré. Ce n'est généralement pas un problème, mais cela peut avoir des effets surprenants car certaines instances, telles que des chaînes, sont partagées entre 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 de différents domaines AppDomain peuvent s'affecter.
En général, utiliser AppDomains n’est pas une pratique quotidienne de codage, cela pourrait être considéré 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 aussi simple que possible, un AppDomain est un conteneur d’isolation même en termes d’adressage en mémoire. À l’intérieur de celui-ci, tous les assemblys nécessaires à une application sont chargés et exécutés, même si ce concept est plus compliqué à expliquer en détail. (J'espère que votre question n'est pas d'aller plus loin).
À partir de là, la classe AppDomain est tout d’abord utilisée pour obtenir un accès au domaine d’application exécutable lié à l’application, ce qui peut être fait via la propriété Singleton, implémentation AppDomain.CurrentDomain
. De cette façon, il est possible de:
Ensuite, la classe AppDomain est utilisée pour:
Il pourrait être utile de consulter le code du nouveau framework Microsoft (non encore publié) MEF (Managed Extesibility Framework) , qui est véritablement basé sur des concepts tels que les créations AppDomains et les assemblages chargés dynamiquement.
En tant qu'exemple simple et illustrant ce que vous pouvez faire avec AppDomains, je peux partager ce link .
J'espère avoir répondu à votre question.
A C # AppDomain est un conteneur logiquement isolé à l'intérieur duquel le code .NET s'exécute. Lorsque vous exécutez un code .NET, il s'exécute toujours dans un domaine d'application par défaut.
Regardez cette vidéo youtube de 30 minutes Qu'est-ce que C # AppDomain? qui explique AppDomain plus en détail.
Mais laissez-moi quand même essayer d’expliquer plus en détail. Disons que vous obtenez un tiers DLL et que vous souhaitez l’utiliser dans votre application. Mais vous doutez également que le tiers puisse avoir un code malveillant, vous voudriez donc exécuter le tiers DLL dans un environnement contraint. Comme si vous ne vouliez pas que le tiers accède à votre lecteur c: ou supprime des fichiers, etc.
Vous pouvez donc créer deux domaines d’application, l’un pour la troisième partie et l’autre pour vos propres classes C #. Pour l'application tierce, vous appliquerez une contrainte de sécurité empêchant l'accès au lecteur c: et pour vos DLL C #, vous disposerez d'un domaine d'application illimité.
Veuillez lire mon blog pour une application standard de chargement à l'exécution de DLL et de communications croisées à l'aide d'AppDomain. https://blog.vcillusion.co.in/sending-events-through-application-domain-boundary/