ASP.NET 允許您使用應用程序狀態來保存每個活動的 Web 應用程序的值,應用程序狀態是 HttpApplicationState 類的一個實例。
應用程序狀態是一種全局存儲機制,可從 Web 應用程序中的所有頁面訪問。因此,應用程序狀態可用於存儲需要在服務器往返行程之間及頁請求之間維護的信息。
應用程序狀態存儲在一個鍵/值字典中,在每次請求一個特定的 URL 期間就會創建這樣一個字典。可以將特定於應用程序的信息添加到此結構以在頁請求期間存儲它。
一旦將應用程序特定的信息添加到應用程序狀態中,服務器就會管理該對象。
應用程序狀態是可用於 ASP.NET 應用程序中的所有類的數據儲存庫。
應用程序狀態存儲於服務器的內存中,並且比在數據庫中存儲和檢索數據的速度更快。
與特定於單個用戶會話的會話狀態不同,應用程序狀態應用於所有的用戶和會話。
因此,應用程序狀態非常適合存儲那些數量少、不隨用戶的變化而變化的常用數據。
應用程序狀態存儲於 HttpApplicationState 類中,用戶首次訪問應用程序中的 URL 資源時將創建該類的新實例。
HttpApplicationState 類通過 Application 屬性公開。
如何:從應用程序狀態中讀取值
應用程序狀態存儲類型化為 Object 的數據。因此,即使將數據存儲於應用程序狀態中時不必對其進行序列化,也必須在檢索數據時將其強制轉換為相應的類型。
確定應用程序變量是否存在,然後在訪問該變量時將其轉換為相應的類型。
下面的代碼示例檢索應用程序狀態值 AppStartTime,並將其轉換為一個 DateTime 類型的、名為 appStateTime 的變量。
if (Application["AppStartTime"] != null) { DateTime myAppStartTime = (DateTime)Application["AppStartTime"]; }
如何:保存應用程序狀態中的值
由於應用程序狀態存儲在服務器的內存中,因此應用程序狀態中的大量數據可快速填充服務器內存。如果重新啟動應用程序,應用程序狀態數據便會丟失。應用程序狀態無法在網絡場中的多台服務器間或網絡園中的輔助進程間共享。最後還請注意,應用程序狀態采用自由線程模式,因此存儲在應用程序狀態中的任何數據必須具有內置的同步支持。
將值寫入應用程序狀態
在應用程序中設置 HttpApplicationState 類中變量的值。
下面的代碼示例演示如何將應用程序變量 Message 設置為一個字符串。
Application["Message"] = "Welcome to the Contoso site.";
應用程序啟動時將值寫入應用程序狀態