当前位置导航:炫浪网>>网络学院>>网页制作>>ASP.NET教程

ASP.NET Cache

  缓存是在内存中存储很耗时创建的数据的一项技术,也是ASP.NET一个重要特性。例如,你可以缓存那些耗时的复杂查询出来的数据,之后的请求不必再从数据库中取数,直接从缓存中取。通过缓存,可以大大提高应该程序的性能。

  主要有两种缓存类型:

  1.输出缓存

  2.数据缓存

  1. Output Caching(输出缓存)

  使用输出缓存,可以缓存页面最终的生成的HTML。当同一个页面再次请求时,缓存页起作用。ASP.NET不再执行页面的生命周期和相关代码。输出缓存的语法:

  1 <%@ OutputCache Duration=”60” VaryByParam=”None” %>

  Duration 属性设置页面将缓存60秒,在所有用户的请求中的第一次请求,ASP.NET执行页面代码,把生最终生成的HTML结果呈现给用户,并在缓存保存。如果服务器在60秒内再次接到同一个页面的请求,ASP.NET自动发送缓存中备份页面给用户。如果服务器在缓存过期后接到一个请求,ASP.NE执行页面代码并为下一个60秒创建一个新的HTML缓存。

  <%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true"CodeFile="OutputCachingTest.aspx.cs" Inherits="OutputCachingTest" Title="Untitled Page" %> <%@ OutputCache Duration="20" VaryByParam="None" %> <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"><div class="title">Output Cache</div>Date: <asp:Label ID="lblDate" runat="server" Text="" />Time: <asp:Label ID="lblTime" runat="server" Text="" /></asp:Content>protected void Page_Load(object sender, EventArgs e){lblDate.Text = DateTime.Now.ToShortDateString();lblTime.Text = DateTime.Now.ToLongTimeString();}

  在本例中, 页面将被缓存20秒。

  Cache by Query String (通过查询字符串缓存)

  在实际应用中,动态页面是根据参数改变页面内容的。如果你的页面是通过查询字符串来接收信息的,你也可以很容易的根据查询字符串来缓存页面的不同拷贝。VarByParam=”None” 告诉ASP.NET只存储页面的一份拷贝。VarByParam=”*”告诉ASP.NET根据不同的查询字符串存储不同的页面拷贝。

  1 <%@ OutputCache Duration="60" VaryByParam="*" %>

  2

  3  <div align="right">

  4    <a href="OutputCachingTest2.aspx">No Query String</a> |

  5    <a href="OutputCachingTest2.aspx?id=1">ID 1</a> |

  6    <a href="OutputCachingTest2.aspx?id=2">ID 2</a> |

  7    <a href="OutputCachingTest2.aspx?id=3">ID 3</a> |

  8    <a href="OutputCachingTest2.aspx?id=3&langid=1">ID 3</a>

  9  </div>

  在同一个页面中,通过传递不同查询字符串ID值,ASP.NET针对每一个ID值存储一份拷贝,该技术在这种情况下利用的非常好,但是也存在一些问题。如果页面接收很广泛的查询字符串,那么,ASP.Net针对每一个查询字符串参数缓存一份拷贝,并且潜在的降低了重用性。这种情况下,你可以在VarByParam属性中指定几个比较重要的查询参数。

  1 <%@OutputCacheDuration="60"VaryByParam="id;langid"%>

  如上所设置,ASP.Net根据不同的“id” 或者 “langid”查询字符串值缓存不同的版本

  Custom Caching(自定义缓存)

  你也可以创建自定义页面缓存处理过程。ASP.NET提供了一种很便捷的方式来创建自定义缓存,通过给VarByCustom属性指定自定义的缓存类型。

  1 <%@ OutputCache Duration="20" VaryByParam="None" VaryByCustom="browser" %>

  你需要创建一个方法,该方法生成一个自定义缓存字符串。语法如下:

  1 public override string GetVaryByCustomString(HttpContext context, string custom)

  2  {

  3     if (custom == "browser")

  4     {

  5        return context.Request.Browser.Browser +

  6               context.Request.Browser.MajorVersion;

  7     }

  8     else

  9     {

  10        return base.GetVaryByCustomString(context, custom);

  11     }

  12  }

  该方法必须写在global.asax文件中,返回一个字符串值。ASP.Net用这个值来实现缓存。如果不同的请求方法返回相同的字符串值,ASP.net重用缓存页面除非产生了一个新的缓存版本。在上面例子中,GetVaryByCustomString()创建了一个基于浏览器名称的缓存字符串。ASP.Net将根据不同的浏览器请求创建不同的缓存版本。

  Control Cache(控件缓存)

  上面的缓存技术,能让你很容易的缓存整个页面。但是如果你想缓存指定的控件内容,你可以通过VaryByControl属性来缓存一个控件

  1  <%@ OutputCache Duration="20" VaryByControl="MyControl_1" %>

  在.aspx页面上添加上面代码,ASP.net将缓存 MyControl_1控件20秒,这样ASP.net创建一个“MyControl_1”缓存版本,如果缓存没有过期,ASP.net重用该缓存版本,除非控件代码重新执行过。如果你想创建一个依赖于控件某些属性的控件缓存,ASP.net同样很方便,只需在*.ascx控件页上添加OutPutCache指令。

  1  <%@ Control Language="C#" AutoEventWireup="true"

  2     CodeFile="MyControl.ascx.cs" Inherits="Controls_MyControl" %>

  3  <%@ OutputCache Duration="20" VaryByControl="EmployeeID" %>

  4  ......

  5  ......

  VaryByControl=”EmployeeID” 告诉ASP.net根据控件属性EmployeeID不同值创建不同的控件缓存版本。

  在.ascx.cs 文件中添加属性”EmplyeeID“,用于ASP.net创建缓存

  1 private int _employeeID;

  2  public int EmployeeID

  3 {

  4    get { return _employeeID; }

  5    set { _employeeID = value; }

  6  }

  7

  8  protected void Page_Load(object sender, EventArgs e)

  9  {

  10    lblDate.Text = DateTime.Now.ToShortDateString();

  11    lblTime.Text = DateTime.Now.ToLongTimeString();

  12

  13    lblEmployeeID.Text = EmployeeID.ToString();

  14

  15  }

相关内容
赞助商链接