|
采用声明方式,使用Substitution控件,设置MethodName属性所需的方法,此方法必须是静态方法,因为当前页输出缓存时

部分页面缓存 缓存后替换 采用声明方式,使用Substitution控件,设置MethodName属性所需的方法,此方法必须是静态方法,因为当前页输出缓存时,页面实例还没被创建。注:AdRotator内部使用了缓存后替代。 以编程方式设置缓存后替换,使用Response.WriteSubstitution()方法,好处:1,此方法引用的方法不一定是当前类的方法,可以是另一个类的实力或静态方法。2,可以在自定义控件中使用此方法实现缓存后替换。 部分页面缓存:用户控件缓存 给用户控件添加<%@ OutputCache%>指令。此指令包含一个Shared属性,可设置共享用户控件的输出缓存。 以编程方式设置用户控件缓存 当用户控件中包括<%@ OutputCache%>指令时,可以通过用户控件的CachePolicy属性所暴露的ControlCachePolicy类的实例的属性控制修改空间如何缓存。 创建用户控件缓存的文件依赖 可以使用CacheControlPolicy.Dependency属性在一个缓存了的用户控件和文件系统中一个文件间创建一个依赖,示例代码: PageLoad: CacheDependency depend=new CacheDependency(MapPath("~/test.xml")); this.CachePolicy.Dependency=depend; 缓存动态载入的用户控件 可以使用Page.LoadControl()方法载入用户控件,当具有缓存特性的用户控件被载入时,Asp.net Framework自动一个PartialCachingControl类的实例包装用户控件。示例代码: PageLoad: PartialCachingControl cacheme=(PartialCachingControl)Page.LoadControl("test.ascx"); Cacheme.CachePolicy.SetExpires(DateTime.Now.AddSeconds(10)); PlaceHolder1.Controls.Add(cacheme); Lable1.Text=cacheme.CachePolicy.Duration.ToString();
3.使用DataSource缓存 SqlDataSource、ObjectDataSource、XmlDataSource控件都包括了用于缓存DataSource承载的属性,好处是数据源控件可以在数据更新时自动重新载入数据。并且可以在多个页面间共享相同的数据,通过一些属性的组合来识别:SelectCommand、SelectParameters、ConnectionString。如果属性相同,即共享相同的缓存数据。 通过设置属性设置缓存过期策略 包括绝对缓存(EnableCaching="True" CacheDuration=“xxx”)和Sliding缓存(EnableCaching="True" CacheExpirationPolicy="Sliding" CacheDuration=“xxx”) 使用ObjectDataSource控件缓存 通过设置控件的EnableCaching、CacheExpirationPolicy、CacheDuration属性以及SelectMethod所制定的方法名来完成。 使用XmlDataSource控件缓存 设置DataFile属性创建一个文件依赖。 创建数据源控件键值依赖 操作步骤 1、设置数据源控件的CacheKeyDependency属性(key); 2、在Global.asax创建初始化的(key)缓存项目。代码如下: 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值采用当前时间并非必须。
北大青鸟-中博http://www.njaccp.com |