首页 > 代码库 > 用户控件的缓存技术之一【共三篇】

用户控件的缓存技术之一【共三篇】

原文发布时间为:2009-10-29 —— 来源于本人的百度文章 [由搬家工具导入]

因为开发的网站数据量很大,对一些动态数据,但又长时间不变的数据,考虑了好久,最终采用ascx缓存技术。

还好,现在网上的资料很全,在此对提供帮助的网友表示万分的感谢,现在把搜索的资料进行整合,以便自己查找学习,也希望能帮助其他人。

用户控件的缓存,也叫片断缓存。

在ascx文件中写入缓存的语句,而不在aspx文件中写缓存语句,这样ASP.NET就可以只缓存ascx片断的输出了。一 般像页眉或页脚基本上都是一样的,就不需要重新加载。但是如果其中有动态变化的数据就不能对其进行缓存,因为一旦被缓存后程序就不会再创建它的实例来更新 数据显示,只有等到生存期过期才行,所以对于这种情况就不适于用页面片断缓存。

注意:

一、注意片段缓存不支持Location特性;缓存页面片段惟一合法的地方是web服务器。这是因为片段缓存在ASP.NET中是新的功能,所以浏览器和代理服务器不支持。

二、片段缓存有另外一个在页面缓存中没有的特性——VaryByControl。VaryByControl特性允许指定一个由分号分隔的字符串列表,代表用户控件内使用的控件的名称;ASP.NET将针对值的每个不同的组合生成用户构件的一个缓存版本。以下是缓存属性说明

Duration允许我们控制页面在缓存中生存的时间(单位是秒)

VaryByParam允许我们缓存页面的不同版本。在上面的例子中,VaryByParam设为了RequestID,所以ASP.NET使用RequestID参数的不同值, 这些值或者是在HTTP GET的查询字符串中传入,或者是在HTTP POST的参数中传入。可以通过检查RequestID参数的值让应用程序区分不 同的用户;通过在页面的OutputCache指令中放置VaryByParam="RequestID",可以让ASP.NET为每个用户缓存页面的不 同版本。

如果不想根据参数的值缓存页面的不问版本,那么只要把VaryByParam设为none。

也可以要求ASP.NET为每个可能的参数组合缓存页面的一个版本。为此,可把VaryByParam设为*。

VaryByCustom特性与VaryByParam的相似之处在于,它们允许指定何时应创建页面新的缓存版本。

VaryByCustom当设为browser时,允许我们根据浏览器的名称和主版本信息缓存不同版本。也可以把它设为一个自定义方法的名称,从而实现我们自己的逻辑,控制缓存的版本。

示例说明:

在ascx 文件头部加 <%@ OutputCache Duration="30" VaryByParam="None"%>
上面是说缓存这个控件30秒,并且缓存内容不随任何指定参数发生变化

在aspx页面像正常调用ascx文件一样,注册引用。

<%@ Register TagName="Prov" TagPrefix="uc" Src=http://www.mamicode.com/"~/common/AreaYP.ascx" %>
       <uc:Prov ID="areaprov" runat="server" />

如果要对该用户控件自定义的属性赋值,需要考虑到缓存控件,在引用时涉及到两个状态对象。初次调用时,使用的是控件本身,缓存期中,使用的是系统根据控件的创建形式相应的建立新的缓存对象。

属性赋值将在下篇给出。

用户控件的缓存技术之一【共三篇】