2010-09-28 109 views
0

1)在標準的.Net應用程序中,是否按要求加載類? (例如,如果我有一個具有靜態構造函數的類,那麼靜態構造函數僅在第一次需要該類時運行?)ASP.Net類加載問題

2)在ASP.Net MVC(或Web窗體)應用程序中,靜態構造函數在每個使用它的請求上調用?或者僅僅是針對使用它的第一個請求?

3)一般情況下,ASP.Net應用程序的生命週期是多少?每個請求都是單獨執行嗎?請求請求中是否存在任何內容?正如你所看到的,我沒有很好地理解.Net運行時何時/如何加載類,而且我無法用正確的谷歌查詢來解決這個問題。如果有人能指出我關於這個問題的一般文件,我會非常感激。

回答

2
  1. 大多數情況下,是的。但是您無法控制static constructor何時執行,除非保證它會在第一次使用之前執行並且它將是線程安全的。不可以。只有第一次訪問時,每個應用程序域一次。
  2. .Net應用程序的生命週期取決於IIS application pool設置和應用程序的穩定性。有一個IIS設置可以強制應用程序回收,這可能會導致應用程序重新啓動。當然,應用程序也可能會崩潰,例如非託管庫,這也會導致重新啓動。
+0

這也可能是有用的。 http://stackoverflow.com/questions/7095/is-the-c-static-constructor-thread-safe – tidwall 2010-09-28 01:31:16

+0

如果拋出異常並且未捕獲,會發生什麼? – 2010-09-28 03:55:56

+1

在典型的.NET應用程序中,異常會終止進程。 ASP.NET應用程序通過管道拾取請求並處理異常,而不重新啓動整個池。因此靜態對象將保持其狀態。有關管道的更多信息,請訪問http://www.west-wind.com/presentations/howaspnetworks/howaspnetworks.asp – tidwall 2010-09-28 16:05:38