首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

IHttpModule.Init 多次執行原因解析(一):HttpApplication 實例池並發處理導致 Init 重複調用,區別於 Application_Start 單次觸發

     編輯:關於C語言

常見誤區

許多開發者錯將 IHttpModule.Init 當作 Application_Start 替代品,在其中進行應用程式初始化。

本質差異

特性IHttpModule.InitApplication_Start
觸發時機每個 HttpApplication 實例建立時第一個 HttpApplication 建立後,僅一次
執行次數並發請求下可能多次應用程式生命週期內僅一次
適用場景註冊事件(BeginRequest 等)全域設定、快取預熱、資料庫連線初始化

為何會多次執行?

ASP.NET 為支援並發,維護 HttpApplication 實例池。當請求數超過池大小,建立新實例,每個實例建立時都會實例化模組並呼叫 Init。開發時單一請求無法重現,上線後並發請求極常見,誤用將導致詭異 Bug。

參考資料

MSDN《IIS 5.0 和 6.0 的 ASP.NET 應用程式生命週期概觀》含流程圖:

ASP.NET 生命週期圖

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved