今天我们将要学习的是:ASP.NET数据缓存。
接触过asp.net 1.x版本的朋友可能会说,这不是个新东西了。
是的,ASP.NET数据缓存确实不是asp.net 2.0的新产物,但是asp.net 2.0赋予数据缓存更多属性和方法,让数据缓存可以在asp.net 2.0时代大展雄风。
数据缓存将频繁被请求的内容存贮在服务器端缓存中,以便这些内容被再次请求时可以更加迅速的反应,并且很有效的降低了服务器的资源占用,提升了程序的运行性能。
asp.net 2.0支持以下几种缓存方案:
1、页面输出ASP.NET数据缓存
页面输出缓存是一种传统级别的相对简单的缓存机制。它将页面数据缓存在服务器内存中,当有客户端再次请求这些内容的时候,服务器可以直接将这些页面数据输出,直到数据缓存过期。
页面输出缓存有两种使用方法:
使用@ OutputCache指令,常见代码如:
- 〈%@ OutputCache Duration="60"
- VaryByParam="sID" Location="Any"%〉
以上例子定义了页面输出缓存有效时间为60s,60s后新建缓存;缓存版本因页面传递的sID参数不同而不同;Location="Any"指定了。
使用页面输出缓存API该方法在页面的程序部分执行,常见代码如:
- Response.Cache.SetExpires
- (DataTime.Now.AddSeconds(60));
上句设定页面缓存有效时间为60s。
关于页面输出缓存的属性还有很多,这里只介绍常用的。详细资料请参见:http://www.itgao.com/html/2007-04/19811.html
2、页面部分缓存
有时候我们可能并不希望把整个页面都缓存起来,而只是缓存页面的某个部分。常用方法有3种:
使用@ OutputCache指令
这种方法的实质是:将需要缓存的这部分内容做成用户自定义控件,然后为自定义控件设置页面缓存代码,方法同页面输出缓存。
使用PartialCachingAttribute类
该方法在用户控件的代码隐藏文件中设置控件的缓存配置内容如下,
- PartialCaching(20)]
- public partial class NewUserControl:UserControl
- {……}
使用ControlCachePolicy类
使用ControlCachePolicy类有以下注意事项。
一是如果要创建正确有效的ControlCachePolicy类实例以便设置控件缓存;
那么必须访问PartialCachingControl类的BasePartialCachingControl.CachePolicy属性(BasePartialCachingControl是PartialCachingControl类的基类)。
二是ControlCachePolicy实例仅在控件生命周期的Init和PreRender阶段之间,才能成功操作。
例子代码:
- 使用PartialCachingAttribute类实现设置用户控件缓存
- (用户控件代码隐藏文件)
- [PartialCaching(100)]
- public partial class SimpleControl :
- UserControl
- {......}
- ASP.NET页面文件源代码。
- 使用ControlCachePolicy类实现设置用户控件缓存
- (ASP.NET页面文件)
- 〈%@ Page Language="C#" Debug="true" % 〉
- 〈%@ Reference Control="SimpleControl.ascx" % 〉
- 〈script language="C#" runat="server" 〉
- void Page_Init(object sender, System.EventArgs e)
- {
- // 动态加载用户控件,
- 并返回PartialCachingControl的实例对象
- PartialCachingControl pcc = LoadControl
- ("SimpleControl.ascx") as PartialCachingControl;
- // 通过CachePolicy属性获取ControlCachePolicy实例
- ControlCachePolicy cacheSettings = pcc.CachePolicy;
- // 如果用户控件的缓存过期设置大于60秒,
- 则设置新的过期时间为30秒,并将其设置为绝对过期策略
- if (cacheSettings.Duration 〉 TimeSpan.FromSeconds(60))
- {
- // 设置用户控件过期时间和缓存过期策略
- cacheSettings.SetExpires(DateTime.Now.Add
- (TimeSpan.FromSeconds(30)));
- cacheSettings.SetSlidingExpiration(false);
- }
- // 将用户控件添加到页面控件层次结构中
- Controls.Add(pcc);
- }
- 〈/script 〉
3、应用程序数据缓存
ASP.NET数据缓存的主要功能是在内存中存储各种与应用程序相关的对象。方法有三种:
指定键和值
Cache["keyName"] = "123";
该语句将新建或者重写名称为txtName的缓存,并赋值为123。
使用Add方法
- Cache.Add("keyName","123",null,DataTime.
- Now.AddSeconds(60),TimeSpan.Zero,
- CacheItemPriority.High,onRemove);
该句实现上例同样的功能,并设定其缓存依赖项为null;缓存有效时间为60s;***一次访问所添加对象时到该对象过期时间的时间间隔为零(TimeSpan.Zero);缓存对象优先级为High;当缓存被删除时调用委托名称为onRemove。
使用Insert方法
Insert方法和Add方法使用方法基本一致,但Insert方法还有几种自己的重载后的方法,例如:
- Cache.Insert("keyName","123");
4、缓存依赖
ASP.NET数据缓存的好处很多,但他也有弊端。比如说数据的实时性,用户获取的页面可能是几十秒甚至是几个小时以前的服务器缓存信息,这一点对于实时性要求比较高的程序来说是不可容忍的。这时候我们可以通过设定缓存依赖,通过对依赖文件的更改变动情况的判断,来决定程序是否需要重建(刷新)缓存。
缓存依赖的方式有很多种,这里我们着重讲解自定义依赖缓存: 自定义缓存依赖
代码:
- string fileName = Server.MapPath
- ("file.xml");//设置文件路径
- DateTime dt = DateTime.Now;
- //设置跟踪依赖文件的开始时间
- CacheDependency dep = new CacheDependency
- (fileName,dt);//创建依赖对象
【编辑推荐】