看一個非常簡單的Web項目,託管在IIS中,帶有一個簡單的aspx頁面,執行一些代碼(從db獲取一些數據並填充一些控件),以下哪項是真的:瞭解ASP.Net實例和線程
每個頁面請求共享codebehind類的同一個實例。
或每個頁面請求都在它自己的代碼隱藏類的實例中運行。
是否有一個線程/實例針對每個aspx頁面運行。或者一個線程/實例是否覆蓋多個頁面?
我試圖理解,在一個簡單的Web項目中,接收100個頁面請求,他們將連續運行一個接一個,或多個實例/線程爲每個請求?
看一個非常簡單的Web項目,託管在IIS中,帶有一個簡單的aspx頁面,執行一些代碼(從db獲取一些數據並填充一些控件),以下哪項是真的:瞭解ASP.Net實例和線程
每個頁面請求共享codebehind類的同一個實例。
或每個頁面請求都在它自己的代碼隱藏類的實例中運行。
是否有一個線程/實例針對每個aspx頁面運行。或者一個線程/實例是否覆蓋多個頁面?
我試圖理解,在一個簡單的Web項目中,接收100個頁面請求,他們將連續運行一個接一個,或多個實例/線程爲每個請求?
因此,一個web服務器可以並行處理多個請求,但是當然可以同時處理多少個請求。
也許看看異步ASP.NET嗎?
http://msdn.microsoft.com/en-us/magazine/cc163725.aspx
通常一個新的線程被分配給一個新的請求。 「
」正常或同步頁面在請求期間持有線程,阻止線程用於處理其他請求。「
對於每個請求,類的後面都有一個實例。
嗯,實際上它是一個aspx頁面類的實例,它繼承自class後面的代碼。 (這就是爲什麼你正在使用的代碼隱藏事件處理程序的protected
關鍵字,因此繼承類可以訪問它們。)
還有,你做一個Server.Transfer
或Server.Execute
的情況下,則該請求被轉移到另一個頁面實例。
有幾個線程在IIS處理請求中運行,通常一個請求在一個線程中處理,但在某些情況下請求可以從一個線程移動到另一個線程。
如果有100個請求到達服務器,它將開始在單獨的線程中處理其中的幾個請求,並將其餘的請求放入隊列中。值得注意的是,服務器一次只能從每個用戶處理一個頁面,因此除非使用無會話頁面(使其匿名),否則它不會爲並行線程中的同一用戶處理兩個頁面,這會使整個線程部分成爲很容易。
我並不質疑你的問題的有效性......但我很想知道你爲什麼對此感興趣。 – Larsenal 2009-11-12 21:51:18
我試圖理解,如果我在代碼隱藏中聲明和設置對象,並且我的函數需要一些時間,是否需要開始考慮thread安全。 – Andy 2009-11-12 21:58:40