ASP.NET 页缓存

添加人:wuzheworld一级(290分)   添加时间:2008-06-18    阅读次数:357  收藏此教程
使用页缓存可大大提高系统的性能,ASP.NET 的页缓存由 OutputCacheModule 控制。OutputCacheModule 会根据相关环境参数来决定输出结果,也正因为这样在缓存有效期内不会调用页方法和事件。另外页缓存(System.Web.HttpCachePolicy)和程序缓存(System.Web.Caching.Cache)并不是一回事。

1. AddValidationCallback

OutputCacheModule 会在每次请求时回调 HttpCacheValidateHandler,因此我们可以通过 HttpCachePolicy.AddValidationCallback() 方法来进行一些针对缓存的操作。

如下面的例子中,当请求带有 "cache=0" 参数时修改验证状态,直接执行当前请求,而不是从缓存输出。(修改验证状态仅对当前请求有效,并不会影响整个缓存策略。)
this.Response.Cache.AddValidationCallback(
  delegate(HttpContext context, Object data, ref HttpValidationStatus status)
  {
    if (HttpContext.Current.Request.QueryString["cache"] == "0")
    {
      HttpContext.Current.Response.Write("Executing...<br>");
      status = HttpValidationStatus.Invalid;
    }
  }, null);

HttpCacheValidateHandler 由 OutputCacheModule 调用,因此我们不能直接使用 "this.Response",而必须改用 "HttpContext.Current.Response" 。

2. 刷新缓存

通过缓存依赖,我们可以很方便地让让缓存失效。

在下面的例子中,我们添加了一个 CacheItemDependency,只要调用 RefreshCache 方法删除依赖项,就会为新请求重新缓存页面输出结果。
private const string cacheItem = "Cache1";

protected void Page_Load(object sender, EventArgs e)
{
  this.Response.Write(DateTime.Now.ToString());
  
  this.Cache.Insert(cacheItem, new object());
  this.Response.AddCacheItemDependency(cacheItem);
}

public static void RefreshCache()
{
  HttpContext.Current.Cache.Remove(cacheItem);
}      

结合前面的例子,我们可以使用 AddValidationCallback 注册一个回调,当请求有特定参数时执行 RefreshCache() 刷新缓存。

3. HttpCacheability

MSDN 文档对于 HttpCacheability 的解释有些模糊,我查了一些资料,希望能让大家更明白点。

NoCache: 仅在共享缓存设备(代理服务器)有条件缓存,且该缓存需要经服务器验证才能发给客户端。
Private: 仅在客户端缓存。单击浏览器前进/后退按钮时有用,刷新浏览器(F5)时依然向服务器发出请求。
Public: 在客户端、共享缓存设备(代理服务器)和服务器都进行缓存。
Server: 仅在服务器缓存。
ServerAndNoCache: 仅在服务器和共享缓存设备(代理服务器)进行缓存。
ServerAndPrivate: 仅在服务器和客户端缓存。
1页 第1上一页1下一页
相关的教程: .NET
收藏此教程

当前平均分: 0.0(0 次打分)

-5-4-3-2-1012345
评论主题
您的大名
您的评论
验证码 点击换一个验证码
知识库搜索: