ASP.NET 缓存
页面输出缓存
在页面上添加<%@ OutputCache Duration=“10” VaryByParam=“none”%>标签就可以启用页面缓存。Duration表示缓存时间;VaryByParam表示页面将根据使用 POST 或 GET 发送的名称/值对(参数)来更新缓存的内容,多个参数用分号隔开。例:
Test.aspx: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="WebApplication1.Test" %> <%@ OutputCache Duration="10" VaryByParam="none"%> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="lblShowTime" runat="server"></asp:Label> </div> </form> </body> </html> Test.aspx.cs: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { this.lblShowTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } }
如果不加 <%@ OutputCache Duration=“10” VaryByParam=“none”%>,则每次刷新页面时,页面上显示的时间都会改变。而加了后,10秒发生一次变化。
如果需要根据参数来更新内容,比如,http://localhost:45724/Test.aspx?id=1,那么只需要把VaryByParam里面的属性值改成id即可。例如,<%@ OutputCache Duration=“10” VaryByParam=“id”%>.多个参数用分号隔开即可,VaryByParam=”id;action”。
页面局部缓存
1.片段缓存
把需要缓存的信息包含在一个用户控件内,然后将该用户控件标记为可缓存的。例:
TestWebUserControl1.ascx: <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestWebUserControl1.ascx.cs" Inherits="WebApplication1.TestWebUserControl1" %> <%@ OutputCache Duration="10" VaryByParam="none" %> <%=DateTime.Now %> Test.aspx: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="WebApplication1.Test" %> <%--<%@ OutputCache Duration="10" VaryByParam="none"%>--%> <%@ Register src="TestWebUserControl1.ascx" tagname="TestWebUserControl1" tagprefix="uc1" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <div> 当前页面的:<%=DateTime.Now %> </div> <div> 用户自定义控件的:<uc1:TestWebUserControl1 ID="TestWebUserControl1" runat="server" /> </div> </div> </form> </body> </html>
当我们不停的去刷新页面时,只有当前页面时间发生变化,而用户自定义控件的时间要隔60后改变一次。
2.缓存后替换
与片段缓存相反,对大部分内容进行缓存。例:
Test.aspx: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="WebApplication1.Test" %> <%--<%@ OutputCache Duration="10" VaryByParam="none"%>--%> <%@ Register src="TestWebUserControl1.ascx" tagname="TestWebUserControl1" tagprefix="uc1" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <div> 当前页面的:<%=DateTime.Now %> </div> <div> 用户自定义控件的:<uc1:TestWebUserControl1 ID="TestWebUserControl1" runat="server" /> </div> <div> 缓存替换-控件缓存:<asp:Substitution ID="Substitution1" runat="server" MethodName="GetCurrentTime" /> </div> </div> </form> </body> </html> Test.aspx.cs: Public static string GetCurrentTime(HttpContext context) { return DateTime.Now.ToString(); }
使用Substitution控件必须具备三个条件:1.方法必须定义为静态方法。2. 必须接受HttpContext类型的参数。3. 必须返回String类型的值。
应用程序数据缓存
利用.NET自带的System.Web.Caching程序集下的cache类 .例:
protected void Page_Load(object sender, EventArgs e) { //this.lblShowTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); string CacheKey = "cachetest"; object objModel = GetCache(CacheKey);//从缓存中获取 if (objModel == null) { objModel = DateTime.Now;//把当前时间进行缓存 if (objModel != null) { int CacheTime = 30;//缓存时间30秒 SetCache(CacheKey, objModel, DateTime.Now.AddSeconds(CacheTime), TimeSpan.Zero);//写入缓存 } } lblShowTime.Text = objModel.ToString(); } /// <summary> /// 获取当前应用程序指定CacheKey的Cache对象值 /// </summary> /// <param name="CacheKey">索引键值</param> /// <returns>返回缓存对象</returns> public static object GetCache(string CacheKey) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; return objCache[CacheKey]; } /// <summary> /// 设置当前应用程序指定CacheKey的Cache对象值 /// </summary> /// <param name="CacheKey">索引键值</param> /// <param name="objObject">缓存对象</param> /// <param name="absoluteExpiration">绝对过期时间</param> /// <param name="slidingExpiration">最后一次访问所插入对象时与该对象过期时之间的时间间隔</param> public static void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; objCache.Insert(CacheKey, objObject, null, absoluteExpiration, slidingExpiration); }
文件缓存依赖
通过更改文件的内容来自动更新缓存。例:
string filePath = "C:\\test.txt"; System.Web.Caching.CacheDependency dep = new System.Web.Caching.CacheDependency(filePath);
改变test.txt里面的内容来更新缓存。
数据库缓存依赖
1. 修改web.config,启用SqlCacheDependency 。
<caching> <sqlCacheDependency enabled="true" pollTime="6000"> <databases> <add name="databasename" connectionStringName="connStr" /> </databases> </sqlCacheDependency> </caching>
2. 为数据库启用缓存依赖
使用C:\\Windows\\Microsoft.NET\\Framework\\[版本]文件夹中aspnet_regsql.exe。
aspnet_regsql -C "data source=127.0.0.1;initial catalog=databasename;user id=sa;password=" -ed -et -t "P_Product"
参数-C后面的字符串是连接字符串(请替换成自己所需要的值),
参数-t后面的字符串是数据表的名字。
3. 在代码中设置缓存
System.Web.Caching.SqlCacheDependency scde = new System.Web.Caching.SqlCacheDependency("数据库", "表名");
参考:http://www.cnblogs.com/ltp/archive/2009/06/30/1514311.html
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。