Frage

Ich erhalte über AppDomains in Interviews gefragt, und Ich kenne die Grundlagen :

  • Sie sind eine Isolationsstufe innerhalb einer Anwendung (sie unterscheiden sich von Anwendungen machen)
  • Sie können Threads (sie macht sich von Threads)
  • Ausnahmen in einer Appdomain wirken sich nicht auf ein anderes
  • AppDomains kann nicht der Speicher jeder anderen zugreifen
  • jede Appdomain können unterschiedliche Sicherheits haben

ich immer noch nicht, was sie notwendig macht. Ich bin für einen angemessenen konkreten Umstand suchen, wenn Sie würde man verwenden.

Antworten:

  • Untrusted Code
    • Kernanwendung geschützt
      Untrusted / 3rd-Party-Plugins wird von verderblichen Shared Memory gesperrt und nicht-autorisierten Zugriff oder eine Festplatte in der Registrierung durch Isolierung in getrennten Appdomain mit Sicherheitseinschränkungen, die Anwendung oder dem Server zu schützen. z.B. ASP.NET und SQL-Server-Hosting-Komponente Code
  • Trusted Code
    • Stabilität
      Anwendung segmentiert in sichere, unabhängige Funktionen / Funktionalität
    • Architektur Flexibilität
      Freedom mehrere Anwendungen innerhalb eines einzigen CLR-Instanz oder jedes Programm in seinen eigenen laufen.

Sonst noch etwas?

War es hilfreich?

Lösung

Die wohl häufigste ist Baugruppen zu laden, die Plug-in-Code von nicht vertrauenswürdigen Parteien enthalten. Der Code wird in einem eigenen AppDomain, um die Anwendung zu isolieren.

Außerdem ist es nicht möglich, eine bestimmte Baugruppe zu entladen, aber Sie können AppDomains entladen.

Für die vollständige Übersicht, Chris Brumme hatte einen massiven Blog-Eintrag auf diese:

http: //blogs.msdn. com / cbrumme / Archiv / 2003/06/01 / 51466.aspx

https://devblogs.microsoft.com/cbrumme/appdomains-application- domains /

Andere Tipps

Ein weiterer Vorteil von AppDomains (wie Sie in Ihrer Frage erwähnt) ist Code, den Sie laden in die sie mit verschiedenen Sicherheitsberechtigungen ausgeführt werden können. Zum Beispiel schrieb ich eine App, die DLLs dynamisch geladen. Ich war ein Lehrer und diese waren Schüler DLLs Ich war geladen. Ich wollte nicht, einige unzufriedenen Schüler meine Festplatte oder beschädigte meine Registrierung tilgen, so lud ich den Code aus ihrem DLLs in eine separate AppDomain, die neuen Fenster nicht Datei IO Berechtigungen oder Bearbeiten der Registrierung Berechtigungen oder sogar Berechtigungen angezeigt werden (es hatte tatsächlich nur ausgeführt werden darf).

Ich denke, die Hauptmotivation dafür, dass AppDomains ist, dass der CLR-Designer ohne zu verursachen, die Performance-Overhead von mehreren Windows-Prozessen eine Art und Weise zu isolieren, verwalteten Code wollte. Wäre die CLR auf der UNIX ursprünglich implementiert worden ist (wo mehrere Prozesse schaffen, ist deutlich weniger teuer), AppDomains kann nie erfunden worden sind.

Auch während verwaltet Plug-in-Architekturen in 3rd-Party-Anwendungen auf jeden Fall eine gute Verwendung von AppDomains ist, desto größer ist Grund, warum sie existieren, ist für bekannte Hosts wie SQL Server 2005 und ASP.NET. Zum Beispiel kann ein ASP.NET-Hosting-Provider eine Shared-Hosting-Lösung anbieten, die mehrere Standorte von mehreren Kunden alle auf das gleiche Feld läuft unter einem Windows-Prozess.

unterstützt

App Domains sind für die Stabilität der Anwendungen.

Durch die Anwendung eines zentralen Prozess bestehen haben, die dann laicht out „Features“ in separaten AppDomains, können Sie ein globaler Absturz verhindern können, sollte einer von ihnen schlecht benehmen.

Wenn Sie eine Anwendung erstellen, die 3rd-Party-Plug-In kann, können Sie diese Plug-In in einem separaten AppDomain laden, so dass die Hauptanwendung vor unbekanntem Code ist.

ASP.NET verwendet auch separate AppDomains für jede Web-Anwendung innerhalb eines einzigen Arbeitsprozess.

Wie ich es AppDomain ist zu verstehen ist entworfen, um das Hosting-Unternehmen (OS, DB, Server etc ...) die Freiheit zu ermöglichen, mehrere Anwendungen in einer einzigen CLR-Instanz oder jedes Programm in seinem eigenen laufen. So ist es ein Problem für den Host statt der Anwendungsentwickler.

Dies ist im Vergleich mit Java, wo man immer 1 JVM pro Anwendung, die oft in vielen Fällen der JVM resultierende Seite mit duplizierten Ressourcen sie ausgeführt werden.

Ich sehe 2 oder 3 Hauptanwendungsfälle für die Erstellung von separaten Anwendungsdomänen:

1) Prozessartige Trennung mit geringer Ressourcennutzung und Overhead. Zum Beispiel ist es das, was ASP.NET tut - es beherbergt jede Website in einer separaten Anwendungsdomäne. Wenn es verschiedene Threads in der einzelnen Anwendungsdomäne verwendet dann Code von verschiedenen Websites miteinander stören könnten. Wenn es verschiedene Websites in verschiedenen Prozessen gehostet -. Wäre es viele Ressourcen und auch die Interprozesskommunikation ist relativ schwierig zu inprocess Kommunikation Vergleich

2) Ausführen von nicht vertrauenswürdigem Code in einer separaten Anwendungsdomäne mit bestimmten Sicherheitsberechtigungen (dies tatsächlich zu ersten Grunde verwendet ist). Da die Menschen schon gesagt, könnten Sie 3rd-Party-Plugins oder nicht vertrauenswürdigen DLLs in separate Anwendungsdomänen geladen werden.

3) Die Fähigkeit, Baugruppen zu entladen unnötigen Speicherverbrauch zu reduzieren. Leider gibt es keine Möglichkeit, eine Baugruppe aus einer Anwendungsdomäne zu entladen. Also, wenn Sie einige große Versammlung auf Ihre Hauptanwendungsdomäne laden, die einzige Möglichkeit, den entsprechenden Speicher frei danach Montage nicht mehr benötigt wird, ist die Anwendung zu schließen. Baugruppen in einem separaten Anwendungsdomäne zu laden und diese Anwendungsdomäne entladen, wenn diese Baugruppen nicht mehr nötig sind, um eine Lösung für dieses Problem.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top