返回首頁
當前位置: 主頁 > 網絡編程 > .Net實例教程 >

ASP.NET-數據緩存

時間:2020-01-16 16:24來源:知行網www.f1globe.com 編輯:麥田守望者

 

什么是緩存?

緩存是一種將經常使用的數據/信息存儲在內存中的技術,因此,當下次需要相同的數據/信息時,可以直接從內存中檢索它,而不必由應用程序生成。

緩存對于ASP.NET中的性能提升極為重要,因為頁面和控件是在此處動態生成的。這對于與數據相關的事務特別重要,因為這些事務的響應時間很昂貴。

高速緩存會將常用數據放置在快速訪問的介質中,例如計算機的隨機訪問存儲器。ASP.NET運行時包含CLR對象的鍵-值映射,稱為高速緩存。它駐留在應用程序中,可以通過HttpContext和System.Web.UI.Page使用。

在某些方面,緩存類似于存儲狀態對象。但是,在狀態對象中存儲信息是確定性的,即,您可以依靠在那里存儲的數據,而數據的緩存是不確定性的。

在以下情況下,數據將不可用:

  • 如果生命周期到期,
  • 如果應用程序釋放其內存,
  • 如果由于某種原因未進行緩存。

您可以使用索引器訪問緩存中的項目,并且可以控制緩存中對象的生存期,并可以在緩存的對象及其物理源之間建立鏈接。

在ASP.Net中緩存

ASP.NET提供以下不同類型的緩存:

  • 輸出緩存:輸出緩存存儲最終呈現的HTML頁面或發送給客戶端的部分頁面的副本。當下一個客戶端請求此頁面時,無需重新生成頁面,而是發送頁面的緩存副本,從而節省了時間。

  • 數據緩存:數據緩存是指從數據源緩存數據。只要緩存沒有過期,就將從緩存中滿足對數據的請求。當緩存過期時,數據源將獲取新數據,并重新填充緩存。

  • 對象緩存:對象緩存是在頁面上緩存對象,例如數據綁定控件。緩存的數據存儲在服務器內存中。

  • 類緩存:首次運行時,網頁或Web服務將在程序集中的頁面類中編譯。然后,程序集被緩存在服務器中。下次請求頁面或服務時,將引用緩存的程序集。更改源代碼后,CLR將重新編譯程序集。

  • 配置緩存:應用程序范圍的配置信息存儲在配置文件中。配置緩存將配置信息存儲在服務器內存中。

在本教程中,我們將考慮輸出緩存,數據緩存和對象緩存。

輸出緩存

呈現頁面可能涉及一些復雜的過程,例如數據庫訪問,呈現復雜的控件等。輸出緩存允許通過將數據緩存在內存中來繞過服務器的往返行程。甚至整個頁面都可以被緩存。

OutputCache指令負責輸出緩存。它啟用輸出緩存,并對其行為提供一定的控制。

OutputCache指令的語法:

<%@ OutputCache Duration="15" VaryByParam="None" %>

將此指令放在page指令下。這告訴環境將頁面緩存15秒。以下用于頁面加載的事件處理程序將有助于測試頁面是否真正被緩存。

protected void Page_Load(object sender, EventArgs e) {    Thread.Sleep(10000);      Response.Write("This page was generated and cache at:" +    DateTime.Now.ToString()); }

所述Thread.sleep代碼()方法停止一段指定的時間進程線程。在此示例中,線程停止了10秒鐘,因此,第一次加載頁面時,它需要10秒鐘。但是,下次刷新頁面時不會花費任何時間,因為該頁面是從緩存中檢索而未加載的。

OutputCache指令具有以下屬性,有助于控制輸出緩存的行為:

屬性 價值觀 描述
磁盤可緩存 真假 指定可以將輸出寫入基于磁盤的緩存。
NoStore 真假 指定是否發送“不存儲”緩存控制標頭。
CacheProfile 字串名稱 要存儲在web.config中的緩存配置文件的名稱。
VaryByParam

沒有

*

參數名
以分號分隔的字符串列表指定GET請求中的查詢字符串值或POST請求中的變量。
VaryByHeader

*

標頭名稱

以分號分隔的字符串列表指定客戶端可能提交的標頭。
VaryByCustom

瀏覽器

自定義字符串

告訴ASP.NET根據瀏覽器名稱和版本或自定義字符串來更改輸出緩存。
位置

任何

客戶

下游

服務器

沒有

任何:頁面可能被緩存在任何地方。

客戶端:緩存的內容保留在瀏覽器中。

下游:存儲在下游和服務器中的緩存內容。

服務器:僅在服務器上保存的緩存內容。

無:禁用緩存。

持續時間 頁面或控件被緩存的秒數。

讓我們在前面的示例中添加一個文本框和一個按鈕,然后為按鈕添加此事件處理程序。

protected void btnmagic_Click(object sender, EventArgs e) {    Response.Write("<br><br>");    Response.Write("<h2> Hello, " + this.txtname.Text + "</h2>"); }

更改OutputCache指令:

<%@ OutputCache Duration="60" VaryByParam="txtname" %>

執行該程序時,ASP.NET將根據文本框中的名稱緩存頁面。

資料快取

數據緩存的主要方面是緩存數據源控件。我們已經討論過,數據源控件表示數據源中的數據,例如數據庫或XML文件。這些控件派生自抽象類DataSourceControl,并具有以下繼承的屬性,用于實現緩存:

  • CacheDuration-設置數據源緩存數據的秒數。

  • CacheExpirationPolicy-定義緩存中的數據過期時的緩存行為。

  • CacheKeyDependency-標識控件的鍵,該鍵在刪除時會自動使緩存內容過期。

  • EnableCaching-指定是否緩存數據。

為了演示數據緩存,請創建一個新網站并在其上添加新的Web表單。使用數據訪問教程中已使用的數據庫連接添加SqlDataSource控件。

對于此示例,在頁面上添加標簽,該標簽將顯示頁面的響應時間。

<asp:Label ID="lbltime" runat="server"></asp:Label>

除了標簽之外,內容頁面與數據訪問教程中的相同。為頁面加載事件添加事件處理程序:

protected void Page_Load(object sender, EventArgs e) {    lbltime.Text = String.Format("Page posted at: {0}", DateTime.Now.ToLongTimeString()); }

設計的頁面應如下所示:

資料快取

第一次執行該頁面時,沒有任何不同,標簽顯示,每次刷新頁面時,頁面都會重新加載,并且標簽上顯示的時間會更改。

接下來,將數據源控件的EnableCaching屬性設置為'true',并將Cacheduration屬性設置為'60'。它將實現緩存,并且緩存將每60秒過期一次。

時間戳隨著每次刷新而變化,但是如果您在這60秒鐘內更改表中的數據,則在緩存到期之前不會顯示該時間戳。

<asp:SqlDataSource ID = "SqlDataSource1" runat = "server"     ConnectionString = "<%$ ConnectionStrings: ASPDotNetStepByStepConnectionString %>"     ProviderName = "<%$ ConnectionStrings: ASPDotNetStepByStepConnectionString.ProviderName %>"     SelectCommand = "SELECT * FROM [DotNetReferences]"    EnableCaching = "true" CacheDuration = "60">          </asp:SqlDataSource>

對象緩存

與其他緩存技術相比,對象緩存提供了更大的靈活性。您可以使用對象緩存將任何對象放入緩存中。該對象可以是任何類型-數據類型,Web控件,類,數據集對象等。只需分配新的鍵名即可將該項目添加到緩存中,如下所示:

Cache["key"] = item;

ASP.NET還提供用于將對象插入到緩存的Insert()方法。此方法有四個重載版本。讓我們看看他們:

超載 描述
Cache.Insert((key,value); 將具有鍵名和鍵值(默認優先級和到期時間)的項插入緩存。
Cache.Insert(鍵,值,依賴項); 將具有鍵,值,默認優先級,到期時間和鏈接到其他文件或項目的CacheDependency名稱的項目插入緩存,以便在更改這些文件或項目時,緩存項目不再有效。
Cache.Insert(鍵,值,依賴項,absoluteExpiration,slidingExpiration); 這表明有上述問題的有效期政策。
Cache.Insert(鍵,值,依賴項,absoluteExpiration,slidingExpiration,優先級,onRemoveCallback); 這與參數一起還使您可以為緩存項設置優先級,并為代理指定優先級,該代理指向刪除該項時要調用的方法。

當在指定的時間段內未使用項目時,滑動到期用于從緩存中刪除該項目。以下代碼段存儲了一個滑動期為10分鐘且沒有依賴項的項目。

Cache.Insert("my_item", obj, null, DateTime.MaxValue, TimeSpan.FromMinutes(10));

創建一個僅帶有按鈕和標簽的頁面。在頁面加載事件中編寫以下代碼:

protected void Page_Load(object sender, EventArgs e) {    if (this.IsPostBack)    {       lblinfo.Text += "Page Posted Back.<br/>";    }    else    {       lblinfo.Text += "page Created.<br/>";    }        if (Cache["testitem"] == null)    {       lblinfo.Text += "Creating test item.<br/>";       DateTime testItem = DateTime.Now;       lblinfo.Text += "Storing test item in cache ";       lblinfo.Text += "for 30 seconds.<br/>";       Cache.Insert("testitem", testItem, null,        DateTime.Now.AddSeconds(30), TimeSpan.Zero);    }    else    {       lblinfo.Text += "Retrieving test item.<br/>";       DateTime testItem = (DateTime)Cache["testitem"];       lblinfo.Text += "Test item is: " + testItem.ToString();       lblinfo.Text += "<br/>";    }           lblinfo.Text += "<br/>"; }

首次加載該頁面時,它說:

Page Created.
Creating test item.
Storing test item in cache for 30 seconds.

如果您在30秒內再次單擊該按鈕,該頁面將被發布回去,但label控件將從緩存中獲取其信息,如下所示:

Page Posted Back.
Retrieving test item.
Test item is: 14-07-2010 01:25:04
------分隔線----------------------------
標簽(Tag):
------分隔線----------------------------
推薦內容
  • ASP.NET-Web服務

    Web服務是一種基于Web的功能,使用要由Web應用程序使用的Web協議進行訪問。 Web服務開...

  • ASP.NET-數據緩存

    什么是緩存? 緩存是一種將經常使用的數據/信息存儲在內存中的技術,因此,當下次需要...

  • ASP.NET-安全

    在站點中實現安全性具有以下方面: 認證 :這是確保用戶身份和真實性的過程。 ASP.NET...

  • ASP.NET-LINQ

    大多數應用程序都以數據為中心,但是大多數數據存儲庫都是關系數據庫。 多年來,設計...

  • ASP.NET-調試

    通過調試,開發人員可以逐步查看代碼的工作方式,變量的值如何更改,對象的創建和銷毀...

  • ASP.NET-錯誤處理

    ASP.NET中的錯誤處理包括三個方面: 跟蹤 -在頁面級別或應用程序級別跟蹤程序執行。 ...

猜你感興趣
99久久免费高清热精品