共用方式為


HOW TO:儲存應用程式狀態的值

更新:2007 年 11 月

應用程式狀態是 ASP.NET 應用程式中所有類別都能使用的資料儲存機制。應用程式狀態是儲存在伺服器的記憶體中,並且速度比在資料庫中儲存和擷取資訊還快。工作階段狀態是指特定的單一使用者工作階段,而應用程式狀態與工作階段不同,是適用於所有使用者和工作階段。因此,應用程式狀態是很有用的位置,可用來存放少量經常使用但不會因使用者不同而變更的資料。

應用程式狀態是儲存在 HttpApplicationState 類別中,當使用者第一次存取應用程式中的任何 URL 資源時就會建立的新執行個體。HttpApplicationState 類別是藉由 Application 屬性公開。

應用程式狀態會將資料儲存為 Object 資料型別。因此,當擷取時您必須將資料轉換回適當的型別。

應用程式狀態是儲存在伺服器的記憶體中,所以應用程式狀態中的大量資料會快速地填滿伺服器記憶體。如果重新啟動應用程式,就會遺失應用程式狀態資料。應用程式狀態不會在 Web 伺服陣列的多重伺服器,或是 Web 處理序區的背景工作處理序之間共用。最後,應用程式狀態是無限制執行緒的,所以儲存在應用程式狀態中的任何資料都必須內建同步處理支援。如需這些考量的詳細資訊,請參閱 ASP.NET 應用程式狀態概觀ASP.NET 狀態管理建議事項

若要將值寫入應用程式狀態

  • 在應用程式中設定 HttpApplicationState 類別的變數值。

    下列程式碼範例顯示如何將應用程式變數 Message 設定為字串。

    Application("Message") = "Welcome to the Contoso site."
    
    Application["Message"] = "Welcome to the Contoso site.";
    

若要在應用程式啟動時將值寫入應用程式狀態

  • 在應用程式之 Global.asax 檔的 Application_Start 處理常式中,設定應用程式狀態變數的值。就如同在一般的 .aspx 網頁一樣,HttpApplicationState 類別是藉由 Application 物件公開。

    下列程式碼範例顯示如何將應用程式變數 Message 設定為字串,然後將變數 PageRequestCount 初始化為 0。

    Application("Message") = "Welcome to the Contoso site."
    Application("PageRequestCount") = 0
    
    Application["Message"] = "Welcome to the Contoso site.";
    Application["PageRequestCount"] = 0;
    

使用鎖定將值寫入應用程式狀態

多重執行緒可以同時存取應用程式狀態變數。因此,若要避免無效的資料,在設定值之前您必須鎖定應用程式狀態,只能讓一個執行緒寫入。

注意事項:

除非您已經設定某些類型的鎖定,否則應該永遠在鎖定陳述式中修改應用程式狀態資料。如需詳細資訊,請參閱同步處理多執行緒處理的資料

若要使用鎖定將值寫入應用程式狀態

  • 在設定應用程式變數的程式碼中,呼叫 HttpApplicationState.Lock 方法、設定應用程式狀態值,然後呼叫 HttpApplicationState.UnLock 方法解除鎖定應用程式狀態,釋放它以便讓其他寫入要求使用。

    下列程式碼範例顯示如何鎖定和解除鎖定應用程式狀態。程式碼會以 1 為單位增加 PageRequestCount 變數,然後解除鎖定應用程式狀態。

    Application.Lock()
    Application("PageRequestCount") = _
        CInt(Application("PageRequestCount")) + 1
    Application.UnLock()
    
    Application.Lock();
    Application["PageRequestCount"] = 
        ((int)Application["PageRequestCount"])+1;
    Application.UnLock();
    

請參閱

工作

HOW TO:讀取應用程式狀態的值

概念

ASP.NET 狀態管理概觀

ASP.NET 狀態管理建議事項

其他資源

ASP.NET 應用程式狀態