Y at-il un AppDomain pour chaque programme C# même si nous ne créons pas spécifiquement un AppDomain? Pourquoi est-ce nécessaire? J'ai lu sur les assemblages de tiers qui plantent l'application entière si nous ne les chargeons pas dans AppDomain distinct. Je n'ai pas bien compris ce point. Quelqu'un peut-il expliquer cela aussi.Y a-t-il un AppDomain pour chaque programme C#?
Répondre
AppDomain
ressemble à un processus, c'est une infrastructure dans laquelle votre application s'exécute. Il n'est pas nécessaire de charger des assemblages tiers dans un AppDomains
distinct, mais si vous le faites, il fournit une isolation entre eux (comme deux processus distincts) et un dysfonctionnement dans l'un n'affecte pas l'autre. Les domaines d'application peuvent être déchargés indépendamment. Par exemple, SQL Server utilise AppDomain
s pour charger des assemblages CLR en toute sécurité dans son processus.
Chaque application a au moins un domaine d'application, oui.
Je ne sais pas ce que signifie la note sur les assemblages tiers.
Il existe au moins un domaine d'application pour chaque programme que vous pouvez créer autant que vous le souhaitez, mais vous en aurez rarement besoin de plus d'un.
C'est fondamentalement un conteneur où le code qui s'exécute avec une confiance particulière est en cours d'exécution.
Il existe un domaine d'application par défaut dans lequel votre application est chargée (chaque instance obtient le sien). L'élément de blocage signifie qu'un ensemble tiers (c'est-à-dire un plug-in) plantera l'ensemble de votre application lorsqu'il se bloque si vous ne le chargez pas dans un domaine d'application distinct. Par conséquent, il est recommandé de charger des plug-ins dans un domaine d'application distinct, car un plantage dans un domaine d'application bloque uniquement ce domaine d'application et pas les autres domaines. Le CLR Add-In blog a des articles à ce sujet.
Une chose importante à noter est qu'un domaine d'application n'a pas nécessairement besoin d'être dans le même processus ou sur le même système, donc vous en avez essentiellement besoin pour la communication à distance.
J'ai lu au sujet des assemblées 3ème partie qui a causé l'accident si nous ne faisons pas usage de AppDomain
Je pense que vous parlez de charger d'autres ensembles dans des domaines d'application distincts. De cette façon, ils peuvent être isolés de votre espace d'adressage pour éviter un crash dans leur code qui vous affecte. Le coût est que la communication avec un assembly dans un domaine d'application distinct est plus difficile et a une pénalité de perf puisque tous les appels doivent être martiqués à travers la limite du domaine de l'application.
Ceci est un sujet assez avancé, je vous recommande de lire dans Richter (d'autres livres sont disponibles).
- 1. appdomain C++ C#
- 2. Comment créer un AppDomain restreint?
- 3. C programme qui imprime un autre programme C en japonais
- 4. AppDomains sont créés pour chaque demande?
- 5. Comment héberger un moteur IronPython dans un AppDomain distinct?
- 6. TraceSource dans TestDriven.NET AppDomain
- 7. Formulaire C# dans un programme C++
- 8. Utilisation d'un AppDomain pour instancier une classe dans une DLL
- 9. Y at-il un modèle MVC pour C# dans WPF
- 10. Plugins/modules pour mon programme C#
- 11. mtrace pour un programme fortran
- 12. AppDomain et le répertoire courant
- 13. Définir un proxy individuellement pour chaque WebBrowser?
- 14. Comment représenter AppDomain dans ASP.NET?
- 15. Un programme d'édition de code simulé pour le code C#
- 16. Programme pour corrompre un fichier?
- 17. Comptage des instances d'une classe dans AppDomain
- 18. Utilisation de subversion pour le déploiement d'asp.net - Causes appdomain recycle
- 19. Pour chaque obtenir RowIndex
- 20. Y a-t-il un programme semblable à de la charpie pour crontab?
- 21. Comment faire pour provoquer un vidage de noyau en C/C++ par programme
- 22. Minimum-trust Méthodes d'appel croisé AppDomain dans une approbation complète AppDomain
- 23. TcpListener: écouter sur chaque adresse, y compris GPRS adresse IP
- 24. Comment charger uniquement l'assembly signé dans un nouvel AppDomain?
- 25. Différence entre AppDomain, assemblage, processus, et un filetage
- 26. Quelle langue est utile pour créer un rapport pour un programme C valide
- 27. C# l'utilisation de AssemblyFileVersion dans un programme
- 28. Apporter libcurl dans un programme C++
- 29. exécuter/ouvrir un programme en C#
- 30. C# - Comment peupler un .net DataGridView par programme?