2013-07-23 36 views
5

Ich versuche den Unterschied zwischen inproc und outproc in C# zu finden. Wenn ich eine DLL auf dem Server laufen habe und meine Frage ist, wird es in Inproc und Outproc laufen? Leistungsmäßig welcher Prozess ist besser?Unterschied zwischen inproc und outproc

+5

Wow, das ist ein sehr weites Thema, mit viel "kommt drauf an". Ein wichtiger Unterschied ist, dass Code, der in-proc ausgeführt wird, alle anderen Methoden im selben Adressraum aufrufen kann. Wenn es out-proc ist, muss ein Marshalling von Parametern und das Überschreiten von Prozessraumgrenzen stattfinden, was Zeit und CPU kostet. – Richard

Antwort

12

Ein Inproc-Server wird im selben Prozess wie die aufrufende Anwendung ausgeführt. Es ist in der Nähe eines normalen Funktionsaufrufs auf einer DLL. Bei einem Outproc-Server müssen Daten über die Prozessgrenze verteilt werden, was eine teure Operation ist. Ein Inproc-Server ist schnell, kann aber Ihre Anwendung zum Absturz bringen.

+1

Was meinen Sie mit "bringen Sie Ihre Anwendung herunter"? Kannst du genauer sein? Sprechen wir Sitzung oder Protokollierung? Ich sehe nicht, wo das OP angegeben. Wenn Logging, dann nehme ich an, was Sie meinen ist, dass wenn die Protokolloperation fehlschlägt, dann kann es die gesamte App zum Absturz bringen, aber wie ist das anders als out pro? – Sinaesthetic

+0

Ich denke, er meint etwas Ähnliches, wenn der Outproc-Server nicht genügend Arbeitsspeicher hat, wird es abstürzen, aber das Programm selbst wird am Leben bleiben und kann es neu starten. ZB std :: vector ist schnell, benutzt aber den Stack/Heap des Container-Prozesses, und wenn es nicht genügend Speicher hat, stürzt das ganze Programm ab, aber wenn Sie es in einen Outproc-Server einbinden, bleibt das Container-Programm am Leben. – Dmitry

7

Von MSDN

Sitzungsstatus von ASP.NET unterstützt verschiedene Speicheroptionen für die Sitzungsdaten. Jede Option wird durch einen Wert in der SessionStateMode-Enumeration identifiziert. In der folgenden Liste werden die verfügbaren Sitzungsstatusmodi beschrieben:

InProc-Modus, der den Sitzungsstatus im Arbeitsspeicher auf dem Webserver speichert. Dies ist der Standardwert.

StateServer-Modus/OutProc, der den Sitzungsstatus in einem separaten Prozess namens ASP.NET State Service speichert. Dadurch wird sichergestellt, dass der Sitzungsstatus beibehalten wird, wenn die Webanwendung neu gestartet wird, und der Sitzungsstatus für mehrere Webserver in einer Webfarm verfügbar gemacht wird.

Der SQLServer-Modus speichert den Sitzungsstatus in einer SQL Server-Datenbank. Dadurch wird sichergestellt, dass der Sitzungsstatus beibehalten wird, wenn die Webanwendung neu gestartet wird, und der Sitzungsstatus für mehrere Webserver in einer Webfarm verfügbar gemacht wird.

Benutzerdefinierter Modus, mit dem Sie einen benutzerdefinierten Speicheranbieter angeben können. Aus-Modus, der den Sitzungsstatus deaktiviert.

+2

I * denke * er spricht über COM, nicht ASP.Net Sitzungsstatus. – tzerb