ASP.NET的缓存技术
原作:Smitha Vijayan
介绍
大量的网站页面是采用动态的方式,根据用户提交的不同请求创建生成页面。正如我们所知的,动态页面有助于根据用户要求来提供定制的动态内容。动态页面也利于获取在数据库中每时每刻更新的资料。缺点是为每个用户请求生成同一页面增加了系统开销。
为克服此问题,一些网站用页面生成引擎对所有页面生成html静态页面。但这样生成的页面对所有用户的请求内容都是相同。
ASP.NET 提供了缓存技术有助于我们最大程度地解决这个问题。它能缓存输出的页面,保存在存储器当中,缓存用户请求的内容。缓存的特点可以根据不方式来定制的。
缓存一个页面
为缓存一个页面输出的内容,我们要在面面顶部指定一个 @OutputCache 命令。语法如下所示:
<%@ OutputCache Duration=5 VaryByParam="None" %>
如你所见,这条指令有两个属性。他们是:
- Duration - 被缓存输出的内容有效期是多少秒。在时间超过指定的有效期后,过期的缓存内容会删除,并会在下次用户请求中重新调用页面生成缓存内容。再次的缓存内容过10秒后此过程又会重复。
- VaryByParam - 这个属性是必须的,并且指明查询字串参数不同使缓存产生变化。在上面的代码片断中,我们指定 VaryByParam 属性是 “None” ,这意味着不论传递的查询字串参数如何不同所返回的页面内容是相同的。
如果对同一页面的两次请求含不同的查询字串参数,如:.../PageCachingByParam.aspx?id=12 和.../PageCachingByParam.aspx?id=15 ,这应该生成不同的页面内容,指令应该是:
<%@ OutputCache Duration=10 VaryByParam="id" %>
对这样两种不同请求的页面内容每一个都会被缓存 Duration 属性指定的时间长度。。
为了指定多个参数的情形,要使用分号来分隔参数名称。如果我们指定 VaryByParam 属性为“*”,缓存内容会因传递的不同查询字串参数而不同。
一些动态页面要根据不同的浏览来生成不同的内容。在这种情况下就要规定缓存输出内容要因不同浏览器而不同。@OutputCache 命令要改为:
<%@ OutputCache Duration=5 VaryByParam="id" VaryByCustom="browser" %>
这条指令不仅让缓存输出内容因浏览器不同而不同,而且也会因浏览器版本不同而不同,如 IE5、IE 6、Netscape 4、Netscape 6 都会获得不同输出的缓存版本。
缓存局部页面
有时我们可能只是想缓存一个页面的一小部分。例如,我们可能用这样的页面,对所有浏览用户都有同样的内容,这个页面有一个标题。这个标题可能是某个文本/图象组成,并且每天数据都可能改变。在这种情况下,我们就会只想缓存这个标题一天的有效期。
解决方法是把标题内容放入一个用户控件当中,然后指定这个用户控件应该被缓存。这个技术被称为局部缓存(fragment caching)。
为了指定应该被缓存的用户控件,我们利用 @OutputCache 指令,就象整个页面缓存的用法一样。
<%@ OutputCache Duration=10 VaryByParam="None" %>
在上面的指令中,用户控件缓存有效期是 Duration 属性指定的时间(10 秒)。不论查询字串和浏览器类型/版本如何,缓存输出的内容是相同的。。
数据缓存
ASP.NET 也支持作为对象类型数据的缓存。我们可以把对象存储在内存中,在我们应用程序的不同动态页面中使用它们。利用 Cache 类可以实现这个特点。缓存的生存周期与应用程序的相同。对象可以以键值对(name value pairs)的形式储存于缓存当中。如下所示插入一个字串进缓存:
Cache["name"]="Smitha";
这个存储的字串值可以象这样得到:
if (Cache["name"] != null)
Label1.Text= Cache["name"].ToString();
共2页 第1页 第2页






