ASP.NET狀態管理之八(應用程式Application)

來源:互聯網
上載者:User

 

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.";

應用程式啟動時將值寫入應用程式狀態
在應用程式 Global.asax 檔案的 Application_Start 處理常式中,設定應用程式狀態變數的值。同常規的 .aspx 頁一樣,HttpApplicationState 類也通過 Application 對象公開。
下面的程式碼範例示範如何將應用程式變數 Message 設定為一個字串,並將變數 PageRequestCount 初始化為 0。
void Application_Start ( object sender , EventArgs e )
{
    // 在應用程式啟動時啟動並執行代碼
    Application [ "Message" ] = "Welcome to the Contoso site.";
    Application [ "PageRequestCount" ] = 0;
}

用鎖定方法將值寫入應用程式狀態
在設定應用程式變數的代碼中,調用 System.Web.HttpApplicationState.Lock 方法,並設定應用程式狀態值,然後調用 System.Web.HttpApplicationState.UnLock 方法取消鎖定應用程式狀態,釋放應用程式狀態以供其他寫入請求使用。
下面的程式碼範例示範如何鎖定和取消鎖定應用程式狀態。該代碼將 PageRequestCount 變數值增加 1,然後取消鎖定應用程式狀態。
Application.Lock();
Application["PageRequestCount"] =  ((int)Application["PageRequestCount"])+1;
Application.UnLock();

應用程式狀態注意事項
1.資源  
由於應用程式狀態儲存在記憶體中,因此比將資料儲存到磁碟或資料庫中速度更快。但是,在應用程式狀態中儲存較大的資料區塊可能會耗盡伺服器記憶體,這會導致伺服器將記憶體分頁到磁碟。除了使用應用程式狀態之外,還可以使用 ASP.NET 緩衝機制來儲存大量的應用程式資料。ASP.NET 緩衝也是將資料存放區在記憶體中,因此速度很快;但是,ASP.NET 會對緩衝進行主動管理,如果記憶體不足時將移除項。
2.易失性  
由於應用程式狀態儲存在伺服器記憶體中,因此每當停止或重新啟動應用程式時應用程式狀態都將丟失。例如,如果更改了 Web.config 檔案,則要重新啟動應用程式,此時除非將應用程式狀態值寫入非易失性儲存媒體(如資料庫)中,否則所有應用程式狀態都將丟失。
3.延展性  
應用程式狀態不能在為同一應用程式服務的多個伺服器間(如在網路場中)共用,也不能在同一伺服器上為同一應用程式服務的多個輔助進程間(如在網路園中)共用。因此,應用程式不能依靠應用程式狀態來實現在不同的伺服器或進程間包含相同的應用程式狀態資料。如果應用程式要在多處理器或多伺服器環境中運行,可以考慮對必須在應用程式中準確儲存的資料使用伸縮性更強的選項(如資料庫)。
4.並發  
應用程式狀態採用自由線程模式,即應用程式狀態資料可由多個線程同時訪問。因此,必須確保通過包含內建同步支援,以安全執行緒的方式進行應用程式狀態資料更新。可以使用 Lock 和 UnLock 方法來確保資料的完整性,方法是鎖定資料,使其一次只能由一個源進行寫操作。還可以初始化 Global.asax 檔案中 Application_Start 方法中的應用程式狀態值,降低出現並發問題的可能性。

總結
ASP.NET 通過 HttpApplicationStatefrlrfSystemWebHttpApplicationStateClassTopic 類將應用程式狀態提供為一種儲存全域應用程式特定資訊(對於整個應用程式都可見)的方法。應用程式狀態變數實際上是 ASP.NET 應用程式的全域變數。
您可以在應用程式狀態中儲存應用程式特定的值,應用程式狀態將由伺服器來管理。
由多個會話共用並且不經常更改的資料是插入到應用程式狀態變數的理想資料。

使用應用程式狀態的優點
1.實現簡單  
應用程式狀態便於使用,為 ASP 開發人員所熟悉,並且與其他 .NET Framework 類一致。
2.應用程式範圍  
由於應用程式狀態可供應用程式中的所有頁來訪問,因此在應用程式狀態中儲存資訊可能意味著僅保留資訊的一個副本(例如,相對於在工作階段狀態或在單獨頁中儲存資訊的多個副本)。

使用應用程式狀態的缺點
1.應用程式範圍  
應用程式狀態的範圍可能也是一項缺點。在應用程式狀態中儲存的變數僅對於該應用程式正在其中啟動並執行特定進程而言是全域的,並且每一應用程式進程可能具有不同的值。因此,不能依賴應用程式狀態來儲存唯一值或更新 Web 場和 Web 園伺服器配置中的全域計數器。
2.資料持久性有限  
因為在應用程式狀態中儲存的全域資料是易失的,所以如果包含這些資料的 Web 服務器進程被損壞(如因伺服器崩潰、升級或關閉而損壞),將丟失這些資料。
3.資源要求  
應用程式狀態需要伺服器記憶體,這可能會影響伺服器的效能以及應用程式的延展性。

應用程式狀態的精心設計和實現可以提高 Web 應用程式效能。例如,如果將常用的、相關的待用資料集放置到應用程式狀態中,則可以通過減少對資料庫的資料請求總數來提高網站效能。但是,這裡存在一種效能平衡。當伺服器負載增加時,包含大塊資訊的應用程式狀態變數就會降低 Web 服務器的效能。在移除或替換值之前,將不釋放在應用程式狀態中儲存的變數所佔用的記憶體。因此,最好只將應用程式狀態變數用於更改不頻繁的小型資料集。

 

 

Sql Server2005 Transact-SQL 新兵器學習總結之-總結
MS SQLDatabase Backup和恢複預存程序(加強版本)
sql server中分散式查詢隨筆(連結的伺服器(sp_addlinkedserver)和遠程登入映射(sp_addlinkedsrvlogin)使用小總結)
WAP開發資料站(最新更新)
自訂格式字串隨筆 (IFormattable,IFormatProvider,ICustomFormatter三介面的實現)
Mcad學習筆記之非同步編程(AsyncCallback 委託,IAsyncResult介面,BeginInvoke方法,EndInvoke方法的使用小總結)
Mcad學習筆記之通過反射調用類的方法,屬性,欄位,索引器(2種方法)
Mcad學習筆記之序列化(2進位和Soap序列化)
Mcad學習筆記之委託再理解(delegate的構造器,BeginInvoke,EndInvoke,Invoke4個方法的探討)
WinForm開發,表單顯示和表單傳值相關知識總結
Mcad學習筆記之Microsoft Windows服務
copy某目錄下的所有的目錄和檔案到目的目錄(目錄數據備份)
ASP.NET狀態管理之一(概括篇)

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.