1,页面部分缓存
通常情况下,缓存整个页是不合理的。因为页的某些部分可能在每一次请求时都进行更改,这种情况下,只能缓存页的一部分即页面部分缓存。页面部分缓存是将页面部分内容保存内存中以便响应用户请求,而页面其他部内容则为动态内容。页面部分缓存的实现包括控件缓存和替换后缓存两种方式。前者也可称为片段缓存,这种方式允许将需要缓存的信息包含在一个用户控件内,然后将该用户标记为可缓存的,以此来缓存页面输出的部分内容。片段缓存这一方式缓存了页面中的特定内容,而没有缓存整个页面,因此,每次都需要重新创建整个页。例如,如果要创建一个显示大量的动态内容(如网上论坛)的页,其中有些部分为静态内容(如首页中的导航条内容),这时可以将静态部分放在用户控件中,并允许缓存这些内容。替换后缓存与用户控件正好相反。这种方式缓存整个页,但页中的各段都是动态的。
2,设置控件缓存的实质是对用户控件进行缓存配置,主要包括一下3种方法:
使用@OutputCache指令声明方式为用户控件设置缓存功能。
在代码隐藏文中使用PartialCachingAttribute类设置用户控件缓存。
使用ControlCachePolicy类以编程的方式指定用户控件缓存设置。
(一):使用@OutputCache指令设置用户控件缓存功能
@OutputCache指令以声明方式为用用户控件设置缓存功能,用户控件缓存与页面输出缓存的@OutputCache指令设置方法基本相同,都在文件顶部设置@OutputCache指令。不同点包括如下两个方面:
1,用户控件缓存的@OutputCache指令设置在用户控件文件中,而页面输出缓存的@OutputCache指令设置在普通ASP.NET文件中。
2,用户控件缓存的@OutputCache指令只能设置6个属性,即Duration、Shared、SqlDependency、VaryByControl、VaryByCustom和VaryByParam。而在页面输出缓存的@OutputCache指令字符串设置的属性多达10个。
用户控件中的@OutputCache指令设置源代码如下:
<%@ OutputCache Duration = "60" VaryByParam ="none" VaryByControl = "ControlID" %>
以上代码为用户控件中的服务器控件设置缓存,其中缓存时间为60秒,ControlID是服务器空控件ID属性值。
注意:
ASP.NET页面和其中包含的用户控件都通过@OutputCache指令设置了缓存,应该注意以下三点:
1,ASP.NET允许在页面和页面的用户控件中同时使用@OutputCache指令设置了缓存,并且允许设置不同的缓存过期时间值。
2,如果页面输出缓存过期时间长于用户控件输出缓存过期时间,则页面的输出持续时间优先。例如:如果页面输出缓存设置为100秒,而用户控件的输出缓存设置为50秒,则包括用户控件在内的整个页将在输出缓存中存储100秒,而与用户控件较短的时间设置无关。
3,如果页面输出缓存过期时间比用户控件的输出缓存过期时间短,则即使已为某个请求重新生成该页面的其余部分,也将一直缓存用户控件直到其过期时间到期为止。例如,如果页面输出缓存设置为50秒,而用户控件输出缓存设置为100秒,则页面其余部分每到期两次,用户控件才到期一次。