2013-07-23 53 views
5

我試圖在c#中找到inproc和outproc之間的區別。如果我有一個DLL在服務器上運行,我的問題是它會在inproc和outproc中運行嗎?在性能方面哪個流程更好?inproc和outproc之間的區別

+5

哇,這是一個非常廣泛的話題,有很多「取決於」。一個重要的區別是,運行in-proc的代碼可以在相同的地址空間中調用其他方法。如果它是out-proc,則需要對參數進行編組以及跨越進程空間邊界,這會花費時間和cpu。 – Richard

回答

12

一個inproc服務器運行在與調用應用程序相同的進程中。它接近於一個DLL上的正常函數調用。調用outproc服務器時,數據需要在整個進程邊界進行編組,這是一項昂貴的操作。 inproc服務器速度很快,但它可能會降低您的應用程序。

+1

「打倒你的應用程序」是什麼意思?你可以說得更詳細點嗎?我們正在談論會議還是記錄?我沒有看到OP指定的位置。如果日誌記錄,那麼我假設你的意思是,如果日誌操作失敗,那麼它可能會崩潰整個應用程序,但與out proc有什麼不同呢? – Sinaesthetic

+0

我認爲他意味着類似於如果outproc服務器內存不足,它會崩潰,但程序本身將保持活着並可以重新啓動。例如,std :: vector速度很快,但使用容器進程的堆棧/堆,如果內存不足,則整個程序崩潰,但如果將其包裝在outproc服務器中,則容器程序將保持活動狀態。 – Dmitry

7

MSDN

ASP.NET會話狀態支持會話數據幾種不同的存儲選項。每個選項都由SessionStateMode枚舉中的值標識。以下列表描述了可用的會話狀態模式:

InProc模式,它將會話狀態存儲在Web服務器的內存中。這是默認設置。

StateServer模式/ OutProc,它將會話狀態存儲在稱爲ASP.NET狀態服務的單獨進程中。這可確保在重新啓動Web應用程序時保留會話狀態,並使Web會話中的多個Web服務器可以使用會話狀態。

SQLServer模式將會話狀態存儲在SQL Server數據庫中。這可確保在重新啓動Web應用程序時保留會話狀態,並使Web會話中的多個Web服務器可以使用會話狀態。

定製模式,它使您能夠指定自定義存儲提供程序。 關閉模式,禁用會話狀態。

+2

我*想*他正在談論COM,而不是ASP.Net會話狀態。 – tzerb