zoukankan      html  css  js  c++  java
  • ASP.NET 2.0的页面缓存功能

      页面部分缓存是指输出缓存页面的某些部分,而不是缓存整个页面内容。实现页面部分缓存有两种机制:一种是将页面中需要缓存的部分置于用户控件(.ascx文件)中,并且为用户控件设置缓存功能(包含用户控件的ASP.NET页面可设置也可不设置缓存)。这就是通常所说的“控件缓存”。
     
    设置控件缓存的实质是对用户控件进行缓存配置。主要包括以下3种方法:一是使用@ OutputCache指令以声明方式为用户控件设置缓存功能,二是在代码隐藏文件中使用PartialCachingAttribute类设置用户控件缓存;三是使用ControlCachePolicy类以编程方式指定用户控件缓存设置。另外,还有一种称为“缓存后替换”的方法。该方法与控件缓存正好相反,将页面中的某一部分设置为不缓存,因此,尽管缓存了整个页面,但是当再次请求该页时,将重新处理那些没有设置为缓存的内容。

      使用@ OutputCache指令

      控件缓存与页面输出缓存的@ OutputCache指令既有相似之处,又有不同的方面。二者的共同点在于它们的设置方法基本相同,都是文件顶部设置包含属性的@ OutputCache指令字符串。不同点包括以下两个方面:一是控件缓存的@ OutputCache指令设置在用户控件文件中,而页面输出缓存的@ OutputCache设置在普通ASP.NET文件中。二是控件缓存的@ OutputCache指令只能设置6个属性,Duration、Shared、SqlDependency、VaryByControl、VaryByCustom和VaryByParam。而在页面输出缓存的@ OutputCache指令字符串中设置的属性多达10个。以上是设置控件缓存时需要注意的问题。下面列举了一些利用@ OutputCache指令设置控件缓存的示例,其中重点说明了VaryByParam和VaryByControl等属性应用。

    用户控件中的@ OutputCache指令设置源代码

    <%@ OutputCache Duration="120" VaryByParam="CategoryID;SelectedID"%>

      以上代码设置用户控件缓存有效期时间是120秒,并且允许使用CategoryID和SelectedID参数来改变缓存。通过VaryByParam属性设置,在服务器缓存中可能存储多个用户控件的实例。例如,对于一个包含用户控件的页面,可能存在如下的URL链接。

    包含用户控件的页面的URL链接

    http://localhost/mypage.aspx?categoryid=foo&selectedid=0
    http://localhost/mypage.aspx?categoryid=foo&selectedid=1

      当请求如上URL地址的页面时,由于控件中@ OutputCache指令的设置,尤其是属性VaryByParam的设置,那么在服务器缓存中就会存储两个版本的用户控件缓存实例。

      控件缓存设置除了支持以上所述VaryByParam属性外,还支持VaryByControl属性。VaryByParam属性基于使用POST或者GET方式发送的名称/值对来改变缓存,而VaryByControl属性通过用户控件文件中包含的服务器控件来改变缓存。下面是VaryByControl属性的应用示例代码。

    用户控件中的@ OutputCache指令设置源代码

    <%@ OutputCache Duration="120" VaryByParam="none" VaryByControl="Category" %>

      以上代码设置缓存有效期是120秒,并且页面不随任何GET或POST参数改变(即使不使用VaryByParam属性,但是仍然需要在@ OutputControl指令中显式声明该属性)。如果用户控件中包含ID属性为“Category”的服务器控件(例如下拉框控件),那么缓存将根据该控件的变化来存储用户控件数据。

      如果读者已经掌握了页面输出缓存的@ OutputCache指令设置方法,那么控件缓存的@ OutputCache指令也会迎刃而解,无非仅使用其中的6个属性而已。然而,可能会产生疑问:如果ASP.NET页面和其中包含的用户控件都通过@ OutputCache指令设置了缓存,那么缓存该如何运行呢?

      遇到这个问题时,应掌握以下个基本原则:一是ASP.NET允许在页面和页面的用户控件中同时使用@ OutputCache指令设置缓存,并且允许设置不同的缓存过期时间值。二是如果页面输出缓存过期时间长于用户控件输出缓存过期时间,则页面的输出缓存持续时间优先。例如,如果页面输出缓存设置为100秒,而用户控件的输出缓存设置为50秒,则包括用户控件在内的整个页将在输出缓存中存储100秒,而与用户控件较短的时间设置无关。三是如果页面输出缓存过期时间比用户控件的输出缓存过期时间短,则即使已为某个请求重新生成该页面的其余部分,也将一直缓存用户控件直到其过期时间到期为止。例如,如果页面输出缓存设置为50秒,而用户控件输出缓存设置为100秒,则页面其余部分每到期两次,用户控件才到期一次。
  • 相关阅读:
    MySQL 性能监控4大指标——第二部分
    mysql 复制A表 到B表;insert into select * from table
    spring boot整合mybatis查询数据库返回Map字段为空不返回解决
    sprinbboot 热部署 造成类加载器 不一致问题
    springboot 整合dubbo 消费模块引入springboot 之后自动注入jdbc 模块导致启动报错问题
    基于Cent os 云服务器中SVN 服务器的搭建---具体实践是可行的 一次备注便于后续查找
    centos7 yum安装配置redis 并设置密码
    ccenteros 部署 redis
    linux ccenteros 部署 redis
    mybatis 插入日期类型精确到秒的有关问题
  • 原文地址:https://www.cnblogs.com/SALIN/p/1230999.html
Copyright © 2011-2022 走看看