Dot-Net

是否為每個請求創建 AppDomain?

  • February 26, 2019

在 ASP.NET 3.5(帶有 IIS6)中,是否為每個請求創建了 AppDomains?我知道所有應用程序在 w3wp.exe 下都有自己的 AppDomain,但整個 AppDomain 究竟是如何工作的呢?

今天我和一位同事爭論,他試圖說服我,如果 ASP.NET 應用程序有一個靜態對象(或 Singleton 類),那麼這個對象將在所有請求之間共享。我認為這是錯誤的。我對嗎?如何說服我的同事?

謝謝!

我很抱歉地說你的同事是對的。在 ASP.NET 應用程序中,在 IIS 中這樣配置的每個應用程序都在其自己的 AppDomain 中執行,這是單例對象的範圍。因此,App1 中的單例可用於對 App1 的所有請求(如果不小心處理,可能會成為並發),但 App2 中的請求將無法訪問 App1 中的單例。

HTTP 管道中的執行緒和池化

(來源:microsoft.com

這張來自 MSDN 雜誌的圖表有助於展示每個應用程序是如何在其自己的 AppDomain 中隔離的。雖然該圖顯示了 IIS5 工作程序 (aspnet_wp.exe),但 IIS6 工作程序對於配置為在同一應用程序池中執行的應用程序來說是相似的。

引用自:https://stackoverflow.com/questions/452845