ASP.NET狀態保存提高每個請求的性能

發表于:2008-05-07來源:作者:點擊數: 標簽:性能狀態NetNETASP
隨著時代車論的推進,先進社會的系統越來越基于WEB模式了,在一個WEB系統中,我們經常需要在系統里保存一些狀態值.那么在ASP.NET里保存狀態又有那些方法呢?既然WEB系統是B/S模式,那么我們的狀態理所當然地可以保存在 服務器 或客戶端,于是產生了客戶端保存和服務
 隨著時代車論的推進,先進社會的系統越來越基于WEB模式了,在一個WEB系統中,我們經常需要在系統里保存一些狀態值.那么在ASP.NET里保存狀態又有那些方法呢?既然WEB系統是B/S模式,那么我們的狀態理所當然地可以保存在服務器或客戶端,于是產生了客戶端保存和服務器端兩種保存方式.

  我們首先看使用服務器端保存方式.

  服務器端保存方式一般有如下3種:

  存儲頁信息的服務器端選項往往比客 戶端選項具有更高的安全性,但它們可能使用更多的 Web 服務器資源,這可能在信息存儲量較大時導致可縮放性問題。

  1,Application:

  利用場合:所有的請求都會需要的一些共有資源,由最先的一個請求率先獲取之后,拿出來共享,其他的請求就不用浪費資源進行再次獲取。典型利用場合:一個股市 Web 站點可能在一天中每 5 分鐘從數據庫獲取大量的金融股票信息(也許是 40 MB 的數據),然后將這些信息緩存在應用程序狀態中,這樣所有以后的查找請求都可以在應用程序狀態中訪問這些信息。其結果是極大地提高了每個請求的性能,因為傳入的請求不需要跨進程、跨計算機或數據庫的往返過程。
'首次Http Get請求 If Not Me.IsPostBack Then '先判斷Application中是否已経有了緩存 If Application.Item("Database") Is Nothing Then '若沒有,從DataCenter中獲取 Dim ds As New DataSet ds.ReadXml(Server.MapPath("TestData.xml")) Dim dv As New DataView(ds.Tables(0)) '拿到之后, 緩存到Application,方便別的進程Http Get請求復用 Application.Add("DataBase", dv) End If Dim dv1 As DataView dv1 = Application.Item("DataBase") '緩存到Session, 方便當前進程的Http Post請求 Session.Add("DataBase", dv1) End If
  優點:易于實現,全局范圍。

  缺點:持久性,若 保存數據的服務器端進程被強行關閉,那么數據就會丟失,所以利用Application一定要有保底的策略,有的話就使用,沒有的話就自己拿。耗用服務器端的內存。

  注意:因為Application中的數據被多個進程公用,所以若需要更新其中的值時,需要利用 如下的語句,做到獨占更新:
Application.Lock() Application.Item("DataBase ") = NewDataBase Application.UnLock()
  2,Session:

  利用場合:單獨的一個進程內部使用,存儲單獨會話的短期的、敏感的數據。

  優點:易于實現,持久性,可以應對IIS重啟和輔助進程重啟, 可在多進程中使用

  缺點:耗用服務器端的內存。

  3,Database:

  優點:安全性。 容量。 持久性。 可靠性和數據完整性。 可訪問性。 廣泛支持。

  缺點:復雜,性能

  方法:使用場合

  應用程序狀態:存儲更改不頻繁的全局信息,這些信息由多個用戶使用,此時安全性不成為問題。不要在應用程序狀態中存儲大量的信息。

  會話狀態:存儲特定于單獨會話的短期信息,并且需要較高的安全性。不要在會話狀態中存儲 大量的信息。在支持許多用戶的應用程序中,這可能會占用大量服務器資源并影響可縮放性。

  數據庫支持:存儲大量信息,管理交易,或者信息必須可以經受得住應用程序和會話重新啟動。數據挖掘十分重要,并且需要較高的安全性。
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97