ASP.NET緩存全解析2:頁面輸出緩存

作者: 李天平  來源: 博客園  發布時間: 2010-07-29 10:26  閱讀: 14403 次  推薦: 2   原文鏈接   [收藏]  
 
[1] ASP.NET緩存全解析2:頁面輸出緩存
[2] ASP.NET緩存全解析2:頁面輸出緩存

  ASP.NET緩存全解析文章索引

  頁面輸出緩存是最為簡單的緩存機制,該機制將整個ASP.NET頁面內容保存在服務器內存中。當用戶請求該頁面時,系統從內存中輸出相關數據,直到緩存數據過期。在這個過程中,緩存內容直接發送給用戶,而不必再次經過頁面處理生命周期。通常情況下,頁面輸出緩存對于那些包含不需要經常修改內容的,但需要大量處理才能編譯完成的頁面特別有用。需要讀者注意的是,頁面輸出緩存是將頁面全部內容都保存在內存中,并用于完成客戶端請求。 

  在ASP.NET中頁面緩存的使用方法非常的簡單,只需要在aspx頁的頂部加這樣一句聲明即可:

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

  Duration:緩存的時間(秒),這是必選屬性。如果未包含該屬性,將出現分析器錯誤。 

 

 
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="CacheWebApp._16_4_3.WebForm1" %>
<%@ OutputCache Duration="60" VaryByParam="none" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>頁面緩存示例</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</div>
</form>
</body>
</html>
  后臺代碼:

 

 
protected void Page_Load(object sender, EventArgs e)
{

if (!IsPostBack)
{
Label1.Text
= DateTime.Now.ToString();
}
}

   如果不加<%@ OutputCache Duration="60" VaryByParam="none" %>,每次刷新頁面上的時間每次都是在變。而加了緩存聲明以后,每次刷新頁面的時間并不變化,60秒后才變化一次,說明數據被緩存了60秒。

  VaryByParam是指頁面根據使用 POST GET 發送的名稱/值對(參數)來更新緩存的內容,多個參數用分號隔開。如果不希望根據任何參數來改變緩存內容,請將值設置為 none。如果希望通過所有的參數值改變都更新緩存,請將屬性設置為星號 (*) 

  例如: http://localhost:1165/16-4-3/WebForm1.aspx?p=1
  則可以在WebForm1.aspx頁面頭部聲明緩存:<%@ OutputCache Duration="60" VaryByParam="p" %> 

  以上代碼設置頁面緩存時間是60秒,并根據p參數的值來更新緩存,即p的值發生變化才更新緩存。 

  如果一直是WebForm1.aspx?p=1訪問該頁,則頁面會緩存當前數據,當p=2時又會執行后臺代碼更新緩存內容。

  如果有多個參數時,如:http://localhost:1165/16-4-3/WebForm1.aspx?p=1&n=1

  可以這樣聲明:<%@ OutputCache Duration="60" VaryByParam="p;n" %> 

   除此之外,@OutputCache 還有一些其他的屬性。@OutputCache指令中的屬性參數描述如下:

 
<%@ OutputCache Duration="#ofseconds"
Location="Any | Client | Downstream | Server | None |
ServerAndClient "
Shared="True | False"
VaryByControl="controlname"
VaryByCustom="browser | customstring"
VaryByHeader="headers"
VaryByParam="parametername"
CacheProfile="cache profile name | ''"
NoStore="true | false"
SqlDependency="database/table name pair |CommandNotification"
%>
 

  CacheProfile用于調用Web.config配置文件中設置的緩存時間。這是可選屬性,默認值為空字符 ("")

   例如在Web.config中加入配置:

 
<system.web>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="CacheTest" duration="50" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
</system.web>

  頁面中聲明:

 
<%@ OutputCache CacheProfile="CacheTest" VaryByParam="none" %>

  注意:包含在用戶控件(.ascx 文件)中的 @ OutputCache 指令不支持此屬性。在頁中指定此屬性時,屬性值必須與 outputCacheSettings 節下面的 outputCacheProfiles 元素中的一個可用項的名稱匹配。如果此名稱與配置文件項不匹配,將引發異常。

  如果每個頁面的緩存時間相同,則不需要每個頁面設置,而是通過統一一個地方控制,這樣就可以更好的統一控制所有頁面的緩存時間。如果想改變緩存時間,只需要改一下web.config的配置信息即可,而不用每個頁面去修改。

  VaryByControl通過用戶控件文件中包含的服務器控件來改變緩存(值是控件ID,多控件用分號隔開)。

  在 ASP.NET 頁和用戶控件上使用 @ OutputCache 指令時,需要該屬性或 VaryByParam 屬性。

 
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="CacheWebApp._16_4_3.WebForm2" %>
<%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="DropDownList1" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>根據控件頁面緩存</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%=DateTime.Now %>
<br>
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem>beijing</asp:ListItem>
<asp:ListItem>shanghai</asp:ListItem>
<asp:ListItem>guangzhou</asp:ListItem>
</asp:DropDownList>
<asp:Button ID="Button1" runat="server" Text="提交" />
</div>
</form>
</body>
</html>

  以上代碼設置緩存有效期是60秒,并且頁面不隨任何GETPOST參數改變(即使不使用VaryByParam屬性,但是仍然需要在@ OutputControl指令中顯式聲明該屬性)。如果用戶控件中包含ID屬性為“DropDownList1”的服務器控件(例如下拉框控件),那么緩存將根據該控件的變化來更新頁面數據。

[第1頁][第2頁]
2
0
 
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()