Truly
写精彩代码 品暇逸人生

用户控件的输出缓存(OutputCache),又称片断缓存,是缓存技术中最常使用的缓存手段之一,通过增加<%@ OutputCache Duration="180" Shared="true" VaryByParam="none" %> 指令可以很方便的使一个控件具有缓存功能,还可以根据需要通过参数缓存,甚至自定义参数比如为每个session缓存一份。
通过Duration我们可以指定缓存的过期时间,单位为秒。但是有时候我们需要在缓存过期之前更新数据,防止无效数据呈现到页面上,那么如何对用户控件进行缓存更新呢?

答案是缓存依赖项,比如利用数据库依赖项SQLCacheDependency,这里我提供另一个方法,就是给用户控件增加一个自定义的缓存依赖项,来立即移除用户控件的缓存。

代码如下:

WebForm1.aspx.cs 的Page_Load()方法:

//////////////////////////////////////
// 用户控件的缓存和更新方法

if (WebUserControl1 != null && WebUserControl1.CachePolicy.SupportsCaching){
    WebUserControl1.CachePolicy.Dependency = new CacheDependency(Server.MapPath("test.txt"));
}

// 输出被缓存的数据
Response.Write("当前时间:" + DateTime.Now.ToString());
Response.Write("<BR>缓存时间:" + Cache.Get("Class1.test").ToString());

在WebForm1.aspx页面增加一个button按钮,并给后台增加如下方法

protected void Button1_Click(object sender, EventArgs e)
{
    //通过改变缓存依赖项 更新缓存
    System.IO.File.SetLastWriteTime(Server.MapPath("test.txt"), DateTime.Now);
}

用户控件的代码如下
WebUserControl1.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
<%@ OUTPUTCACHE duration="5" varybyparam="none" %>
<%= DateTime.Now.ToString() %>


这样以来,点击按钮时,更新缓存依赖项test.txt,就达成了用户控件缓存的移除。

以上代码适用于Asp.Net 2.0。点击这里下载源码,包括了页面缓存的示例。

posted on 2006-10-12 12:55  Truly  阅读(1957)  评论(1编辑  收藏  举报