了解 ASP.NET 中的靜態變數生命週期
在 ASP.NET 中,在頁面類別(Global.asax
外部)內宣告並在 Page_Load
中初始化的靜態變數有時會意外重置,即使在活動會話中也是如此。這種行為源自於靜態變數的本質和 ASP.NET 的動態編譯。
為什麼靜態變數會重設
ASP.NET 靜態變數在應用程式域的生命週期內存在。 當應用程式網域重新啟動或包含的類別被替換時,它們將被重設。 由於 ASPX 頁面是動態編譯的,因此 ASP.NET 可能會重新編譯頁面類,從而有效地建立新實例並重置靜態變數。
防止類別替換期間靜態變數遺失
雖然應用程式域重新啟動不可避免地會重置靜態變量,但您可以減輕類別替換帶來的損失。 解決方案是從 ASPX 頁面和 App_Code
目錄中重新定位靜態變數。建議在不同的應用程式模組中使用單獨的靜態類別。
重要注意事項
請記住,靜態變數是針對每個應用程式集區的。 多池部署將具有單獨的靜態變數集。 此外,靜態變數本質上不是線程安全的,需要明確同步機制來進行多執行緒存取。
ASP.NET 中靜態變數的替代品
為了更可靠的資料持久性,如果靜態變數的重設有問題,請考慮靜態變數的替代方案。 具有自訂類別的資料庫提供持久存儲,而 Session State
提供每用戶資料持久性。 避免使用 Application State
,因為它也是駐留在記憶體中的,並且會在應用程式域重新啟動時遺失。
以上是為什麼即使有活動會話,ASP.NET 中的靜態變數也會重置?的詳細內容。更多資訊請關注PHP中文網其他相關文章!