在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1.页面缓存 要实现页面输出缓存,只要将一条 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" %> 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”。如果要使输出缓存根据所有参数值发生变化,则将属性设置为“*”。 示例代码:Response.AddFileDependency(MapPath("test.xml")); 以编程方式操作页面输出缓存 操作由Response.Cache属性暴露的HttpCachePolicy类对象的方法。 创建页面输出缓存配置 复制代码 代码如下: <system.web> <caching> <outputCacheSettings> <outputCacheProfiles> <add name="CacheProfile1" duration="60" /> </outputCacheProfiles> </outputCacheSettings> </caching> </system.web> 2.部分页面缓存 缓存后替换 以编程方式设置用户控件缓存 当用户控件中包括<%@ OutputCache%>指令时,可以通过用户控件的CachePolicy属性所暴露的ControlCachePolicy类的实例的属性控制修改空间如何缓存。 创建用户控件缓存的文件依赖 可以使用CacheControlPolicy.Dependency属性在一个缓存了的用户控件和文件系统中一个文件间创建一个依赖,示例代码: 可以使用Page.LoadControl()方法载入用户控件,当具有缓存特性的用户控件被载入时,Asp.net Framework自动一个PartialCachingControl类的实例包装用户控件。示例代码: 3.使用DataSource缓存 SqlDataSource、ObjectDataSource、XmlDataSource控件都包括了用于缓存DataSource承载的属性,好处是数据源控件可以在数据更新时自动重新载入数据。并且可以在多个页面间共享相同的数据,通过一些属性的组合来识别:SelectCommand、SelectParameters、ConnectionString。如果属性相同,即共享相同的缓存数据。 通过设置属性设置缓存过期策略 包括绝对缓存(EnableCaching="True" CacheDuration=“xxx”)和Sliding缓存(EnableCaching="True" CacheExpirationPolicy="Sliding" CacheDuration=“xxx”) 使用XmlDataSource控件缓存 设置DataFile属性创建一个文件依赖。 创建数据源控件键值依赖 复制代码 代码如下: Void Application_Start(Object Sender,EventArgs e) { HttpContext context=HttpContext.Current; context.Cache.Insert( "key",DateTime.Now,null,DateTime.MaxValue,Cache.NoSlidingExpiration,CacheItemPriority.NotRemovable,null ); } 3、在用于更改数据的页面上移除缓存项目(key); 如在DetailsView控件的ItemInserted事件中重新插入缓存项目,此时每个依赖于这个键值(key)的DataSource会自动重新载入数据,代码如下: 复制代码 代码如下: protected void DetailsView_ItemInserted(object sender,DetailsViewInsertedEventArgs e) { Cache.Insert("key",Datetime.Now); } 注:以上key值采用当前时间并非必须。 4.Cache对象 几乎可以给缓存添加任何对象,例如,可以添加自定义控件,DataSet,DataTable,ArrayList和List到缓存。注意:使用从缓存中返回的任何项目,应该总是要检查项目是否为空,如果一个项目已经被删除了,则当将来试图从缓存中读取时,就会返回null。 复制代码 代码如下: void Page_Load() { DataTable dt=(DataTable)Cache["dtkey"]; if(dt==null) { dt=getdtFromDB(); //此处调用方法从数据库中返回数据项DataTable Cache.Insert("dtKey",dt,null,DateTime.Now.AddHours(1),Cache.NoSlidingExpiration); //此处使用绝对过期策略添加项目 } GridView1.DataSource=dt; GridView1.DataBind(); } private DataTable getdtFromDB() { //略...... } 使用依赖添加项目 Asp.net Framework包括三种缓存依赖 CacheDependency类是基类,其他两个类都是从该类继承。 指定缓存项目优先级 配置缓存 5.使用SQL缓存依赖 Asp.net Framework支持两种类型的SQL缓存依赖:拉和推。第一种模式使用表轮询的 ASP.NET 实现,第二种模式使用 SQL Server 2005 的查询通知功能。可以对任何最近版本的Ms SQL Server,包括Ms SQL server 2005 Express、Ms SQL Server 2000 和 Ms SQL Server 7.0,使用拉SQL缓存依赖。第二种类型推缓存依赖则只能用于Ms SQL Server 2005和Ms SQL server 2005 Express,因为他们依赖SQL Server的Service Broker。 实质上拉SQL缓存依赖使用数据库tigger,当表被修改时,tigger被触发,名为AspNet_SqlCacheTablesForChangeNotification的数据表的一行数据被更新,来记录修改情况,Asp.net Framework使用一个后台线程,来定期拉数据表的修改信息。如果有修改,则依赖于数据表的缓存项目被移除。 简要步骤: 1、启用特定数据库的SQL缓存依赖。 2、必须在Web配置文件中配置SQL缓存依赖。 复制代码 代码如下: <!-- caching section group --> <caching> <sqlCacheDependency enabled = "true" pollTime = "1000" > //通过pollTime 的设置,定时拉数据库的修改 <databases> <add name="Northwind" connectionStringName="NorthwindConnectionString1" pollTime = "1000" /> </databases> </sqlCacheDependency> </caching> a、 对页面输出缓存使用拉SQL缓存依赖:<%@ OutputCache%>指令指定sqlDependency属性值:库名和表名(Mydatabase:Mytable); b、对DataSource控件使用拉SQL缓存依赖:为DataSource控件sqlDependency属性指定值:库名和表名(Mydatabase:Mytable); c、对Cache对象使用拉SQL缓存依赖: 复制代码 代码如下: void Page_Load() { DataTable dt=(DataTable)Cache["dtkey"]; if(dt==null) { dt=getdtFromDB(); //此处调用方法从数据库中返回数据项DataTable SqlCacheDependency sqlDepend=new SqlCacheDependecy("Mydatabase","Mytable"); Cache.Insert("dtKey",dt,sqlDepend); } GridView1.DataSource=dt; GridView1.DataBind(); } private DataTable getdtFromDB() { //略...... } 使用推SQL缓存依赖 通过Service Broker可以在数据库中的数据变更时自动给应用程序发送一个消息。 1.为推SQL缓存依赖配置数据库 2.为推SQL缓存依赖配置应用程序 复制代码 代码如下: void Application_Start(object sender, EventArgs e) { string conString=WebConfigurationManager.ConnectionStrings["MyContention1"].ConnectionString; SqlDependency.Start(conString); HttpContext context=HttpContext.Current; context.Cache.Insert( "key",DateTime.Now,null,DateTime.MaxValue,Cache.NoSlidingExpiration,CacheItemPriority.NotRemovable,null ); } a、对页面输出缓存使用推SQL缓存依赖: 当缓存整个Asp.net页面时,可以使用推Sql缓存依赖。如果包含在页面上的任何Sql命令的结果有变动,页面就会自动从缓存中过期。 SqlCommand对象包含一个NotificationAutoEnlist属性,该属性默认值为true。当NotificationAutoEnlist启用时,页面和命令间自动创建一个推缓存依赖。注意SqlDataSource的SelectCommand必须符合查询要求。 b、对DataSource控件使用推SQL缓存依赖: 只需要设置SqlcacheDependency属性即可。设置SqlCacheDependency=“CommandNotification” c、对Cache对象使用推SQL缓存依赖: 复制代码 代码如下: void Page_Load() { DataTable dt=(DataTable)Cache["dtkey"]; if(dt==null) { string conString=WebConfigurationManager.ConnectionStrings["MyContention1"].ConnectionString; SqlDatadapter dad=new SqlDataAdapter("Select a,b From dbo.Mytable",conString); //注意查询符合要求 SqlCacheDependency sqlDepend=new SqlCacheDependecy(dad.SelectCommand); dt=new DataTable(); dad.Fill(dt); Cache.Insert("dtKey",dt,sqlDepend); } GridView1.DataSource=dt; GridView1.DataBind(); } 注意,SqlCacheDependency类的示例被创建了。一个SqlCommand对象被传递给SqlCacheDependency类的构造函数。如果SqlCommand的结果变化了,则这个DataTable会自动从缓存中失效。这些命令的顺序很重要。必须在执行该命令之前创建SqlCacheDependency对象。如果在创建SqlCacheDependency对象之前调用Fill()方法,则依赖会被忽略。 |
请发表评论