ASP.NET 2.0中的页面输出缓存_实用技巧

静态页面全部内容保存在服务器内存中。当再有请求时,系统将缓存中的相关数据直接输出,直到缓存数据过期。这个过程中,缓存不需要再次经过页面处理生命周期。这样可以缩短请求响应时间,提高应用程序性能。很显然,页面输出缓存适用于不需要频繁更新数据,而占用大量时间和资源才能编译生成的页面。对于那些数据经常更新的页面,则不适用。默认情况下,ASP.NET 2.0启用了页面输出缓存功能,但并不缓存任何响应的输出。开发人员必须通过设置,使得某些页面的响应成为缓存的一部分。

   设置页面输出缓存可以使用以下两种方式:一种是使用@ OutputCache指令,另一种是使用页面输出缓存API。@ OutputCache指令曾经在ASP.NET 1.x中出现过,并在ASP.NET 2.0中得到了继承和增强。页面输出缓存API主要是指HttpCachePolicy类。

使用@ OutputCache指令

   使用@ OutputCache指令,能够实现对页面输出缓存的一般性需要。@ OutputCache指令在ASP.NET页或者页中包含的用户控件的头部声明。这种方式非常方便,只需几个简单的属性设置,就能够实现页面的输出缓存策略。@ OutputCache指令声明代码如下。

@ OutputCache指令代码

<%@ OutputCache CacheProfile =" " NoStore= "True | False" Duration ="#ofseconds" Shared ="True | False" Location ="Any | Client | Downstream | Server | None | ServerandClient " SqlDependency ="database/table name pair | CommandNotification " VaryByControl ="controlname" VaryByCustom ="browser | customstring" VaryByHeader ="headers" VaryByParam ="parametername" %>

   如上所示,在@ OutputCache指令中,共包括10个属性,它们是CacheProfile、NoStore、Duration、Shared、Location、SqlDependency、VaryByControl、VaryByCustom、VaryByHeader和VaryByParam。这些属性将对缓存时间、缓存项的位置、SQL数据缓存依赖等各方面进行设置。下面简要介绍以上属性的基本概念。

CacheProfile

   用于定义与该页关联的缓存设置的名称。是可选属性,默认值为空字符("")。需要注意的是,包含在用户控件中的@ OutputCache指令不支持此属性。在页面中指定此属性时,属性值必须与Web.config文件<outputCacheSettings>配置节下的outputCacheProfiles元素中的一个可用项的名称匹配。如果此名称与配置文件项不匹配,将引发异常。

NoStore

   该属性定义一个布尔值,用于决定是否阻止敏感信息的二级存储。需要注意的是,包含在用户控件中的@ OutputCache指令不支持此属性。将此属性设置为true等效于在请求期间执行代码“Response.Cache.SetNoStore();”。

Duration

   用于设置页面或者用户控件缓存的时间。单位是秒。通过设置该属性,能够为来自对象的HTTP响应建立了一个过期策略,并将自动缓存页或用户控件输出。需要注意的是,Duration属性是必需的,否则将会引起分析器错误。

Shared

   该属性定义一个布尔值,用于确定用户控件输出是否可以由多个页共享。默认值为false。注意,包含在ASP.NET页中的@ OutputCache指令不支持此属性。

Location

   用于指定输出缓存项的位置。其属性值是OutputCacheLocation枚举值,它们是Any、Client、Downstream、None、Server和ServerAndClient。默认值是Any,表示输出缓存可用于所有请求,包括客户端浏览器、代理服务器或处理请求的服务器上。需要注意的是,包含在用户控件中的@ OutputCache指令不支持此属性。 

SqlDependency

   该属性标识一组数据库/表名称对的字符串值,页或控件的输出缓存依赖于这些名称对。需要注意:SqlCacheDependency类监视输出缓存所依赖的数据库中的表,因此,当更新表中的项时,使用基于表的轮询将从缓存中移除这些项。当通知(在SQL Server 2005中)与CommandNotification值一起使用时,最终将使用SqlDependency类向SQL Server 2005服务器注册查询通知。另外,SqlDependency属性的CommandNotification值仅在ASP.NET页中有效。控件只能将基于表的轮询用于@ OutputCache指令。

VaryByControl

   该属性使用一个分号分隔的字符串列表来更改用户控件的输出缓存。这些字符串代表在用户控件中声明的ASP.NET服务器控件的ID属性值。除非已经包含了VaryByParam属性,否则在@ OutputCache指令中,该属性是必需的。

VaryByCustom

   用于自定义输出缓存要求的任意文本。如果赋予该属性值是browser,缓存将随浏览器名称和主要版本信息的不同而异。如果输入了自定义字符串,则必须在应用程序的Global.asax文件中重写HttpApplication.GetVaryByCustomString方法。

VaryByHeader

   该属性中包含由分号分隔的HTTP标头列表,用于使输出缓存发生变化。当将该属性设为多标头时,对于每个指定的标头,输出缓存都包含一个请求文档的不同版本。VaryByHeader属性在所有HTTP 1.1缓存中启用缓存项,而不仅限于ASP.NET缓存。用户控件中的@ OutputCache指令不支持此属性。

VaryByParam

   该属性定义了一个分号分隔的字符串列表,用于使输出缓存发生变化。默认情况下,这些字符串与用GET方法属性发送的查询字符串值对应,或与用POST方法发送的参数对应。当将该属性设置为多参数时,对于每个指定的参数,输出缓存都包含一个请求文档的不同版本。可能的值包括“none”、“*”和任何有效的查询字符串或POST参数名称。值得注意的是,在输出缓存ASP.NET页时,该属性是必需的。它对于用户控件也是必需的,除非已经在用户控件的@ OutputCache指令中包含了VaryByControl属性。如果没有包含,则会发生分析器错误。如果不需要使缓存内容随任何指定参数发生变化,则可将该值设为“none”。如果要使输出缓存根据所有参数值发生变化,则将属性设置为“*”。

   下面列举了两个使用@OutputCache指令的示例代码。

使用@ OutputCache的示例代码1

<%@ OutputCache Duration="100" VaryByParam="none"%>

   以上示例是@ OutputCache指令的基本应用,其指示页面输出缓存的有效期是100秒,并且页面不随任何GET或POST参数改变。在该页仍被缓存时接收到的请求由缓存数据提供服务。经过100秒后,将从缓存中移除该页数据,并随后显式处理下一个请求并再次缓存页。

使用@ OutputCache的示例代码2


<%@ OutputCache Duration="100" VaryByParam="location;firstname" %>

   以上@ OutputCache指令设置页面输出缓存的有效期是100秒,并且根据查询字符串参数location或者firstname来设置输出缓存。例如,假设客户端请求是“http://localhost/default.aspx?location=beijing”,那么该页面将被作为缓存处理。

静态页面全部内容保存在服务器内存中。当再有请求时,系统将缓存中的相关数据直接输出,直到缓存数据过期。这个过程中,缓存不需要再次经过页面处理生命周期。这样可以缩短请求响应时间,提高应用程序性能。很显然,页面输出缓存适用于不需要频繁更新数据,而占用大量时间和资源才能编译生成的页面。对于那些数据经常更新的页面,则不适用。默认情况下,ASP.NET 2.0启用了页面输出缓存功能,但并不缓存任何响应的输出。开发人员必须通过设置,使得某些页面的响应成为缓存的一部分。

   设置页面输出缓存可以使用以下两种方式:一种是使用@ OutputCache指令,另一种是使用页面输出缓存API。@ OutputCache指令曾经在ASP.NET 1.x中出现过,并在ASP.NET 2.0中得到了继承和增强。页面输出缓存API主要是指HttpCachePolicy类。

时间: 2024-12-31 02:25:39

ASP.NET 2.0中的页面输出缓存_实用技巧的相关文章

ASP.NET 2.0中的页面输出缓存

asp.net|缓存|页面 静态页面全部内容保存在服务器内存中.当再有请求时,系统将缓存中的相关数据直接输出,直到缓存数据过期.这个过程中,缓存不需要再次经过页面处理生命周期.这样可以缩短请求响应时间,提高应用程序性能.很显然,页面输出缓存适用于不需要频繁更新数据,而占用大量时间和资源才能编译生成的页面.对于那些数据经常更新的页面,则不适用.默认情况下,ASP.NET 2.0启用了页面输出缓存功能,但并不缓存任何响应的输出.开发人员必须通过设置,使得某些页面的响应成为缓存的一部分. 设置页面输出

asp.net 页面输出缓存_实用技巧

主要用于不经常更新和修改,而在第一次编译是时要经过大量处理的数据.页面输出缓存是缓存的整个页面 使用很简单<%@ OutPutCache Duration="60" VaryByParam="none"%> Duration:缓存时间 VaryByParam:通过参数来更新缓存的内容 还有其他的一些属性 CacheProfile:调用WebConfig中的缓存时间 例如:WebCofig中 复制代码 代码如下: <system.web> &l

asp.net 提高网站速度及如何利用缓存_实用技巧

输出缓存和片段缓存的优点是非常易于实现,在大多数情况下,使用这两种缓存就足够了.而缓存API则提供了额外的灵活性(实际上是相当大的灵活性),可用于在应用程序的每一层利用缓存.本文全面介绍了这三种缓存技术在系统各层中的应用. 在ASP.NET提供的许多特性中,缓存支持无疑是我最欣赏的特性,我这样说当然是有充分理由的.相比ASP.NET的所有其他特性,缓存对应用程序的性能具有最大的潜在影响,利用缓存和其他机制,ASP.NET开发人员可以接受使用开销很大的控件(例如,DataGrid)构建站点时的额外

asp.net 1.1/ 2.0 中快速实现单点登陆_实用技巧

问题:  网站有bbs.xxx.com / main.xxx.com / pay.xxx.com 这三个不同的二级域名站,要实现任何一二级域名处登陆,其他各二级域名的站均登陆. 解决办法: 设置cookie的domain属性. 详细介绍: 把保存用户登陆信息的cookie的域设置成一样即可.usercookie.Domain=".xxx.com"; 要注意,在域名前必须要加一个".".这个设置在登陆和退出的时候都需要. 比较普遍的做法自然是用一个专门负责用户登陆的类

Asp.Mvc 2.0用户服务器验证实例讲解(4)_实用技巧

这一节给大家讲解下ASP.NET MVC 2.0的服务器端验证的用法.大家知道,一个项目只用JS客户端验证是不安全的,用户可以禁用JS来绕过客户端验证,所以必须有服务器端验证. 关于服务器端验证,主要调用System.ComponentModel.DataAnnotations命名空间里面的类库. 咱们这次还是以注册页面为例来讲解服务器端验证,主要对注册页面完成以下验证 1.用户名不能为空 2.密码不能为空,密码长度不能小于5位数, 3.密码和确认密码输入必须一样 4.邮件格式必须正确 咱们先看

在.NET2.0中使用自定义事务操作_实用技巧

.net 2.0 framework 中新增了 System.Transactions 命名空间,其中提供的一系列接口和类使得在.net 2.0 中使用事务比起从前要方便了许多.有关在 .net 2.0 下操作数据库事务的文章已经有了很多,这里只提一下如何设计自定义事务操作. 一.事务使用基础 先看一段使用事务的代码: 1using (TransactionScope ts= new TransactionScope())2{3 //自定义操作4 ts.Complete();5} 这里使用 us

如何利用扩展方法来链式的对MVC 3中的页面进行验证_实用技巧

.Net 3.0 添加了一个语法糖就是扩展方法,其实扩展方法的本质就是对类的静态方法的调用,虽然扩展方法只是改变了我们写代码的方式,但是如果我们使用得当,可以给我们带来巨大的编码效率的提升.对于C#扩展方法的使用,我就不细说了,贴段代码说明扩展方法的使用,大家就会回忆起来. 复制代码 代码如下: public static class Extensions { public static string EndWith(this string str) { return str + "@"

ASP.NET性能优化之构建自定义文件缓存_实用技巧

现在,借助于.NET4.0中的OutputCacheProvider,我们可以有多种选择创建自己的缓存.如,我们可以把HTML输出缓存存储到memcached分布式集群服务器,或者MongoDB中(一种常用的面向文档数据库,不妨阅读本篇http://msdn.microsoft.com/zh-cn/magazine/gg650661.aspx).当然,我们也可以把缓存作为文件存储到硬盘上,考虑到可扩展性,这是一种最廉价的做法,本文就是介绍如果构建自定义文件缓存. 1:OutputCachePro

ASP.NET web.config中 数据库连接字符串加密解密_实用技巧

虽然不怎么新鲜,但相信还是有许多人不知道,好,不说废话,直接给方法:开始--->运行,输入cmd,接着输入以下内容 加密: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" "你的Web项目路径" 解密: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -