5

Google Chrome und IE8 (unter anderem) zielen darauf ab, größere Zuverlässigkeit/Stabilität zu bieten, indem jede Registerkarte (Webseite) in einem separaten Prozess isoliert wird (zu vereinfacht, ich weiß).Chrome/IE8 Multi-Prozess-Design, ist es in .NET möglich?

Dies scheint viel mehr Schwergewicht als mehrere Threads zu sein, aber hat den großen Vorteil eines Absturzes in einem Prozess nicht die gesamte Anwendung zu bringen.

Es scheint, dass die multiple Prozessarchitektur lange in serverseitigen Anwendungen (z. B. Webservern) verwendet wurde, aber dies sind Prozesse ohne dedizierte GUI. Es ist interessant, dass es jetzt in den Benutzerschnittstellen von Desktop-Anwendungen verwendet wird.

Wie würde ich das in einer Windows Forms .NET-Anwendung implementieren? Ist es überhaupt möglich?

Process.Start() ist ein offensichtlicher erster Ort, aber die GUI des neuen Prozesses ist nicht eng mit der GUI der Host-Anwendung integriert. Es handelt sich um eine neue eigenständige Anwendung, nicht um eine Untersteuerung/ein Fenster der Hostanwendung wie bei Chrome/IE8.

(Für interessierten jedermann Scott Hanselmann ein gutes Intro schrieb an die IE8 multi-process architecture here..)

[Update]

Genauer gesagt:

Wie kann ein separater "Unterprozess" macht direkt an die UI im "Hauptprozess"? Ist dies tatsächlich der Fall oder wird in Kommentaren vorgeschlagen, verwendet der Unterprozess IPC, um den Hauptprozess danach zu fragen?

Antwort

3

Eine bessere Option zur Verwendung mehrerer Prozesse in .NET wäre die Verwendung mehrerer AppDomains. Dies hat den Vorteil, dass nur ein tatsächlicher Windows-Prozess erstellt wird und dennoch die zusätzliche Stabilität mehrerer Bereiche gegeben ist (d. H. Ein Absturz in einer AppDomain würde nur diesen herunterfahren, nicht die gesamte App).

Kosten sind damit verbunden, da Objekte über AppDomain-Grenzen serialisiert werden müssen. Es könnte jedoch einfacher zu entwickeln sein als ein Multi-Prozess-Modell.

+0

+1, vor allem die Einschränkungen der Kommunikation zwischen den Domänen. Das kann viel teurer sein, als Entwickler manchmal erwarten. –

+1

Können 2 AppDomains in einem einzigen Prozess die Benutzeroberfläche unabhängig voneinander aktualisieren, dh separate Tabs? Auch, wie Scott Hanselmann sagt, ist es immer noch möglich, den gesamten Prozess von einer AppDomain herunter zu bringen. – Ash

+0

@Ash unter Annahme eines Prozesses/AppDomain ist der "GUI" -Prozess, der dafür verantwortlich ist, Befehle von anderen Prozessen zu empfangen und diese zu reflektieren; und zurück zu ihnen, warum nicht? –

5

Google Chrome verwendet Named Pipes für Interprozesskommunikation.

Es gibt einige interessante Dokumente hier: http://dev.chromium.org/developers/design-documents

Weitere Informationen über Named Pipes mit ".net" google es einfach.

@Ash: Die untergeordneten Prozesse laufen in separate Windows "Desktops" was bedeutet, dass sie keine Möglichkeit haben, etwas anzuzeigen. (Desktops sind eine knifflige Sache ...) Also muss ich davon ausgehen, dass alles, was die Kind-Prozesse rendert, über IPC gehen muss. Und dann zeigt der Hauptprozess (?) Es an.

Ich fand, dass separaten Windows "Desktop" Sache hier: http://dev.chromium.org/developers/design-documents/multi-process-architecture

+0

Irgendeine Idee, wie es die Interaktionsseite der GUI implementiert? – Ash

+0

Exzellente Links zu Chrome, danke, – Ash

+0

Gern geschehen. Das interessiert mich auch sehr. :) –

1

btw ...dup

Siehe auch: Windows Forms application like Google Chrome with multiple processes (mit Antwort von Jon Skeet: o)

(Ich denke, das beantwortet die "insbesondere" Teil auch)

+0

Danke nochmal. Ich habe 5 Minuten damit verbracht, nach einer bestehenden Frage zu suchen. Ich tippte auch verschiedene Titel in das Textfeld "Frage stellen". Diese funktionieren meiner Erfahrung nach nicht sehr gut, naja. – Ash

+0

Ich habe gerade einen kurzen Blick auf die "Related" Box auf der rechten Seite geworfen: P –

Verwandte Themen