Gibt es eine AppDomain für jedes C# -Programm, auch wenn wir keine AppDomain erstellen? Warum ist es erforderlich? Ich habe gelesen, dass Drittanbieter-Assemblies die gesamte Anwendung abstürzen, wenn wir sie nicht in separate AppDomain laden. Ich habe diesen Punkt nicht gut verstanden. Kann mir jemand das auch erklären.Gibt es eine AppDomain für jedes C# -Programm?
Antwort
AppDomain
ist so ziemlich wie ein Prozess, es ist eine Infrastruktur, in der Ihre Anwendung ausgeführt wird. Eine .NET-Assembly muss in einem AppDomain
geladen werden, um ausgeführt zu werden. Es ist nicht erforderlich, Baugruppen von Drittanbietern in separaten AppDomains
zu laden, aber wenn Sie dies tun, stellt es Isolierung zwischen ihnen (wie zwei separate Prozesse) und Fehlfunktion in einem wird sich nicht auf den anderen auswirken. Anwendungsdomänen können unabhängig voneinander entladen werden.
Als Beispiel verwendet SQL Server AppDomain
s, um CLR-Assemblies sicher in seinem Prozess zu laden.
Jede Anwendung hat mindestens eine Anwendungsdomäne, ja.
Ich weiß nicht, was die Notiz über 3rd Party Assemblies bedeutet.
Es gibt mindestens eine AppDomain für jedes Programm, das Sie beliebig oft erstellen können, aber Sie werden selten mehr als eins benötigen.
Es ist im Grunde ein Container, in dem Code ausgeführt wird, der mit einer bestimmten Vertrauensstellung ausgeführt wird.
Es gibt eine Standard-App-Domäne, in die Ihre Anwendung geladen wird (jede Instanz erhält eine eigene).
Die Absturz-Sache bedeutet, dass eine Drittanbieter-Assembly (z. B. ein Plugin) die gesamte Anwendung abstürzt, wenn sie abstürzt, wenn Sie sie nicht in eine separate App-Domäne laden. Es empfiehlt sich daher, Plug-Ins in eine separate App-Domain zu laden, da ein Absturz in einer App-Domain nur zu dieser App-Domain und nicht zu den anderen Domains führt. Die CLR Add-In blog hat einige Beiträge dazu.
Eine wichtige Sache zu beachten ist, dass eine App-Domäne nicht notwendigerweise in demselben Prozess oder auf demselben System sein muss, so dass Sie es im Grunde für das Remoting benötigen.
ich über 3rd-Party-Baugruppen gelesen haben verursacht Absturz, wenn wir die Verwendung von AppDomain nicht
machen
Ich glaube, Sie sprechen über andere Baugruppen in getrennten Anwendungsdomänen geladen werden. Auf diese Weise können sie von Ihrem Adressraum isoliert werden, um einen Absturz ihres Codes zu verhindern, der Sie betrifft. Die Kosten liegen darin, dass das Kommunizieren mit einer Assembly in einer separaten App-Domäne schwieriger ist und zu einer Leistungseinbuße führt, da alle Anrufe über die Grenzen der App-Domäne hinweg martialisch geführt werden müssen.
Dies ist ein ziemlich fortgeschrittenes Thema, würde ich empfehlen, in Richter lesen (andere Bücher sind avaiable).
- 1. Gibt es eine Möglichkeit, eine Foreach für jedes Elementpaar in 2 IEnumerables in C# zu tun?
- 2. Gibt es ein fusselartiges Programm für Crontab?
- 3. AppDomain UnhandledException
- 4. Gibt es Guava für C#?
- 5. AppDomain Entladen töten Eltern AppDomain
- 6. Speicherzuordnung für C-Programm
- 7. Gibt es eine Abkürzung für Array-Größe/Länge in C?
- 8. Gibt es eine Entsprechung in C für C++ - Vorlagen?
- 9. Gibt es eine faule "String.Split" in C#
- 10. Gibt es eine andere einfachere Möglichkeit, dieses Programm zu schreiben?
- 11. Verwendung von AppDomain in C#
- 12. C-Programm gibt seltsame Ergebnisse
- 13. Gutes Beispiel für die Verwendung von AppDomain
- 14. Wie wird eine AppDomain mit C# ordnungsgemäß entladen?
- 15. Gibt es eine Möglichkeit, einen Compilator in ein Programm einzubinden?
- 16. Gibt es ein Programm, um Assembly in C++ zu konvertieren?
- 17. Gibt es einen C-Präprozessor als unabhängiges Programm?
- 18. Gibt es ein Werkzeug oder eine Möglichkeit, ein c-Programm in C#
- 19. Gibt es eine Möglichkeit, eine Meta-Berechtigung für jedes Modell in einer Django-App anzuwenden?
- 20. Gibt es eine bessere Möglichkeit, die Methode jedes abgeleiteten Objekts für eine Basisklasse aufzurufen?
- 21. Gibt es eine C++ 11 CSPRNG?
- 22. Wie wird eine AppDomain erstellt?
- 23. Gibt es eine Emacs-Enzyklopädie für Tastaturbelegungen?
- 24. Gibt es eine Uhrzeitsynchronisierungslösung für Java?
- 25. Gibt es eine leichtgewichtige plattformübergreifende C++ - Dateisystembibliothek?
- 26. Gibt es eine TRACE-Anweisung für Basic Win32 C++?
- 27. Gibt es eine funktionale Sprache für C++ - Ökosystem?
- 28. gibt es eine Warnung (Fehler), ähnlich wie C4061 für C#
- 29. Gibt es eine gute radixsort-Implementierung für Floats in C#
- 30. Gibt es ein AddRange Äquivalent für eine HashSet in C#