Was ist die wichtigste Verwendung von AppDomains in C #?
Antworten:
Die wichtigste Verwendung ist, dass Ihr Code einen haben muss - dh alles, was Sie in C # schreiben, wird in einem ausgeführt AppDomain
. Das ist ziemlich wichtig ;-p
Wenn Sie zusätzliche App-Domains meinen :
Wenn Sie Plugins und anderen nicht vertrauenswürdigen Code verwenden, können Sie diese sowohl isolieren als auch entladen (Sie können keine Assemblys entladen - nur ganze App-Domänen).
Ich verwende es derzeit, um dynamisch generierte DLLs zu laden, damit ich sie entladen kann.
Sie können auch verschiedene Konfigurationsdateien, Vertrauensstufen usw. festlegen, sind jedoch mit Kosten für Komplexität und Remoting verbunden.
MSDN hat einen Abschnitt über App-Domains, hier .
Ich kann Ihnen nicht sagen, was die wichtigste Verwendung ist, da dies von der Situation abhängt.
AppDomains sind nützlich, um Teile Ihrer Anwendung zu sandboxen. Sie können Erweiterungen in eine AppDomain laden und erneut entladen - etwas, das Sie sonst nicht tun können. Sie können AppDomains bestimmte Rechte zuweisen. Standardmäßig können Objekte in verschiedenen AppDomains nicht aufeinander zugreifen.
AppDomains können als einfache Prozesse angesehen werden, da sie Ihnen viele der gleichen Funktionen bieten. Im Gegensatz zu einem Prozess haben neue AppDomains jedoch standardmäßig keinen eigenen Thread. Sie müssen AppDomains und Threads selbst verwalten.
Außerdem teilen sich AppDomains alle denselben verwalteten Heap. Dies ist normalerweise kein Problem, kann jedoch überraschende Auswirkungen haben, da einige Instanzen wie Zeichenfolgen von AppDomains gemeinsam genutzt werden. Bei regelmäßiger Verwendung ist dies kein Problem. Wenn Sie jedoch Zeichenfolgen zum Sperren verwenden, können sich Threads in verschiedenen AppDomains gegenseitig beeinflussen.
Im Allgemeinen ist es nicht so alltäglich, AppDomains zu verwenden. Dies könnte als fortgeschrittenes Konzept angesehen werden. Ausgehend von dieser einfachen Sache ist es jedoch wichtig, die Konzepte hinter dem Wort "AppDomain" besser zu verstehen.
In Bezug auf die Architektur und so einfach wie möglich ist eine AppDomain ein Isolationscontainer, selbst in Bezug auf die Speicheradressierung. In ihr werden alle von einer Anwendung benötigten Assemblys geladen und ausgeführt, auch wenn dieses Konzept im Detail komplizierter zu erklären ist (Ich hoffe, es geht nicht um Ihre Frage, so tiefer zu gehen).
Von dort aus wird zunächst die AppDomain-Klasse verwendet, um Zugriff auf die anwendungsbezogene ausführende Anwendungsdomäne zu erhalten. Dies kann über die Implementierung der Singleton-Eigenschaft erfolgen AppDomain.CurrentDomain
. Auf diese Weise ist es möglich:
Dann wird die AppDomain-Klasse verwendet, um:
Es kann nützlich sein, sich den Code des neuen Microsoft-Frameworks (noch nicht veröffentlicht) MEF (Managed Extesibility Framework) anzusehen, das wirklich auf Konzepten wie AppDomains-Kreationen und dem Entladen dynamisch geladener Assemblys basiert.
Als einfaches Beispiel für Dinge und Beispiele dafür, was Sie mit AppDomains tun können, kann ich diesen Link teilen .
Ich hoffe ich habe deine Frage beantwortet.
AC # AppDomain ist ein logisch isolierter Container, in dem .NET-Code ausgeführt wird. Wenn Sie einen .NET-Code ausführen, wird dieser immer in einer Standard-Appdomain ausgeführt.
Sehen Sie sich dieses 30-minütige Youtube-Video an. Was ist C # AppDomain? Dies erklärt AppDomain ausführlicher.
Aber lassen Sie mich noch versuchen, es genauer zu erklären. Nehmen wir an, Sie erhalten eine DLL eines Drittanbieters und möchten diese in Ihrer Anwendung verwenden. Sie vermuten jedoch auch, dass der Drittanbieter über schädlichen Code verfügen kann, sodass Sie die DLL des Drittanbieters in einer eingeschränkten Umgebung ausführen möchten. Als ob Sie nicht möchten, dass der Dritte auf Ihr Laufwerk c: zugreift oder Dateien löscht und so weiter.
Sie können also zwei AppDomains erstellen, eine für Dritte und eine für Ihre eigenen C # -Klassen. Für die Appdomain eines Drittanbieters wenden Sie Sicherheitsbeschränkungen an, die nicht auf Laufwerk c: zugreifen können, und für Ihre C # -DLLs verfügen Sie über eine uneingeschränkte App-Domain.
Bitte lesen Sie meinen Blog für die Standardanwendung des Laufzeitladens von DLLs und der gegenseitigen Kommunikation mit AppDomain. https://blog.vcillusion.co.in/sending-events-through-application-domain-boundary/