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

ASP.NET输出缓存的使用

  在asp.net仲使用output cache 非常简单。只需在页面或者自定义控件上声明,即可以控制页面或者控件的缓存策略。

  例如:

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

  这样就声明了一个页面的缓存策略。缓存的存续时间为10秒,任何通过GET或者POST方式传递到页面的参数都会使页面的输出缓存失效。

  页面outputcache指令的具体参数在MSDN上有详细说明,在此就不赘述了。

  使用输出缓存应注意以下:

  asp.net页面在缓存生成以后,失效之前,所有对该页面的请求,直接从内存中取出并送显,将不会经历asp.net的页面生命周期。也就是说在页面声明周期内的各种事件内的代码,将不会被执行。

  往往页面不能够整体被缓存,有些部门需要及时更新,这就需要部分页缓存或者缓存后替换。

  部分页缓存

  为自定义控件声明缓存,页面中调用该控件,控件将会缓存,其余部分不被缓存。

  被缓存后的控件一样不经历生命周期,将不能和页面交互。

  缓存后替换

  MSDN给出三种缓存后替换方案:

  1. Substitution控件实现缓存后替换

  <asp:Substitution ID="Substitution1" runat="server" MethodName="GetDate" />

  代码:

  protected static string GetDate(HttpContext context)

  {

  return "<b>" + DateTime.Now + "</b>";

  }

  注意:(1)substitution控件的MethodName属性所指定的方法必须为静态方法并具有HttpContext类型参数。

  (2)在上例中的GetDate方法中,因为没有经历页面的生命周期,在方法体内Request、Session、Cookies等等页面属性都是不可用的。

  2.Response.WriteSubstitution 方法

  Response.WriteSubstitution(new HttpResponseSubstitutionCallback(GetDate));

  GetDate方法同上。

  3. AdRotator控件

  Adrotator服务器控件在内部实现对缓存后替换的支持

  另外在使用时我发现一种比较另类的缓存后替换,比较适合于懒人。那就是用iframe,在iframe内存放动态更新的内容。

  如果页面大面积需要缓存,而只有一小块不能缓存,而且这一块的动态更新需要依赖Page属性(比如Session)或者控件的值,可以考虑iframe。

  最后,在使用中发现这样一个问题。asp.net会缓存两个版本:一个是首次打开时被缓存的版本,一个页面建立缓存之后第一次postback的版本。

  也就是说在页面被缓存之后,第一次postback会执行页面的生命周期。以后的请求,如果是首次请求则送显首次打开的缓存版本,如果是postback则送显第一次postback时的缓存版本。不清楚为什么会是这样?为什么页面被缓存之后,第一次postback还会起作用?还请各位大侠点拨。

相关内容
赞助商链接