Style
一切都是源于生活......
页面部分缓存是指输出缓存页面的某些部分,而不是缓存整个页面的内容。实现页面部分缓存有两种方式:一种子是将页面中需要缓存的部分置于用户控件中,并对用户控件设置缓存功能,是通常所说的“控件缓存”。另外一种是“缓存后替换”的方法,该项方法与用户控件缓存正好相反,将页面中的某一部分设置为不缓存,虽然缓存了整个页面,但是当再次请求该项页面时,将重新处理那些没有设置为缓存的内容。

1、使用@OutputCache指令

控件缓存与页面输出缓存是大部分相同的,可是也有不同之处。控件缓存的@OutputCache指令只能设置6个属性:Duration 、Shared、 SqlDependency、 VaryByControl、 VaryByCustom 和 VaryByParam。

<%@ OutputCache Duration="100" VaryByParam="CategoryID;SelectedID" %>

注意:1)、ASP.NET允许在页面和页面的用户控件中同时使用@OutputCache指令设置缓存,并且允许设置不同的缓存过期时间值。2)、如是页面输出缓存过期时间长于用户控件输出缓存过期时间,则页面的输出缓存持续时间优先。3)、如果页面输出缓存过期时间比用户控件的输出缓存过期时间短,则即使已为某个请求重新生成该页面的其余部分,也将一直缓存用户控件直到其过期时间到期为止。

2、使用PartialCachingAttribute类

PartialCachingAttibute类有6个属性和4种构造函数。

6个属性:Duration、 Shared、 SqlDenpendency、 VaryByControl 、VaryCustom 和Varyparam。

4个构造函数:1)、[PartialCachingAttibute(int Duration)] 

2)、[PartialCachingAttibute(int  Duration, string  VaryByParams, string  VaryByControls , string  VaryByCustom)]

3)、[PartialCachingAttibute(int  Duration, string  VaryByParams, string  VaryByControls , string  VaryByCustom, bool shared)]

4)、[PartialCachingAttibute(int  Duration, string  VaryByParams, string  VaryByControls , string  VaryByCustom, string sqlDenpendency, bool shared)]

例子:

[PartialCachingAttibute(20)]

public partial class NewUserControl : UserControl{..............}

3、使用ControlCachePolicy类

ControlCachePolicy类的6个属性:Cached、 Dependency、 Duration 、SupportsCaching、 VaryByControl、 VaryByparams

ControlCachePolicy类3个常用的方法:SetExpires、 SetSlidingExpiration 和 SetVaryByCustom。

public void SetExpires(DateTime expirationTime);

public void SetSlidingExpiration(bool useSlidingExpiration);

public void SetVaryByCustom(string varyByCustom);

 ControlCachePolicy是.NET Framework 2.0中新出现的类,主要用于提供对用户控件的输出缓存设置的编程访问.

 例子:

使用PartialCachingAttribute类实现用户控件缓存(用户控件代码隐藏文件)

[PartialCaching(100)]

public partial class SimpleControl:UserControl{................}

使用ControlCachePolicy类实现设置用户控件缓存(ASP.NET页面文件)

<%@ Page language="C#" Debug="true" %>

<%@ Reference Control="SimpleControl.ascx" %>

Void Page_Init(object sender,System.EventArgs e)

{

       PartialCachingControl pcc=LoadControl("SimpleControl.ascx") as PartialCachingControl;

       ControlCachePolicy cacheSetting = pcc.CachePolicy;

       if(cacheSettings.Duration > TimeSpan.FromSeconds(60))

       {

              cacheSettings.SetExpires(DateTime.Now.Add(TimeSpan.FromSeconds(30)));

              cacheSettings.SetSlidingExpiration(false);

       }

       Controls.Add(pcc);

}

4、实现缓存后替换

1)、SubStitution控件应用

使用SubStitution控件指定页面中免于缓存的部分,SubStitution控件声明代码如下:

<asp:substitution id="substitution1" methodname="" runat="server"></substitution>

在上述的代码中,有一个重要的属性methodname,这个属性用于获取或者设置当substitution控件执行时为回调而调用的方法名称。这个方法必须符合以下三个标准:必须为静态方法,必须接受的是HttpContext类型的参数,方法返回的必须是string类型的值。

public static string GetCurrentDateTime(HttpContext context)

{

       return DateTime.Now.ToString();

}

2)、Substitution控件API应用

Substitution控件API包括一个关键WriteSubstitution方法,该方法来自于HttpResponse类,其语法代码如下:

public void WriteSubstitution(HttpResponseSubstitutionCallback callback)

如上所示,WriteSubstitution方法仅有一个参数HttpResponseSubstitutionCallback。该项参数是一个委托,其语法代码如下:

public delegate string HttpResponseSubstitutionCallback (HttpContext context)

HttpResponseSubstitutionCallback委托定义的方法有两个特征:返回值必须是string,参数只有一个,并且是HttpContext类型。

例子:

public static string GetCurrentDateTime(HttpContext context)

{

       return DateTime.Now.ToString();

}

Response.WriteSubstitution(new HttpResponseSubstitutionCallback(GetCurrentDateTime));

posted on 2009-07-13 09:15  啊A  阅读(486)  评论(0)    收藏  举报