上一篇结尾总写了下,缓存其实可以分为两类,1,用cache类在应用程序中保存自己的数据;2,在页面中通过配置文件/页面配置或者通过HttpCachePolicy类与HttpCacheability枚举来缓存。
这篇重点说Cache类。
Cache类是一个sealed类。在MSDN中有句话:“对于每个应用程序域均创建该类的一个实例,并且只要对应的应用程序域保持活动,该实例便保持有效。有关此类实例的信息通过 HttpContext 对象的 Cache 属性或 Page 对象的 Cache 属性来提供。”这句话的意思就是说,不用自己new一个Cache对象出来了,应用程序给我们准备了使用的方法。但是这里面露掉了一个HttpRuntime.Cache。
总结下就是可以通过三种途径使用Cache
1、HttpRuntime.Cache;
2、HttpContext.Cache;(这里还有个HttpContext.Current.Cache,这两个是一个东西。)
3、Page.Cache;
现在来说说四个东西的区别。关于HttpRuntime.Cache与HttpContext.Current.Cache,参见http://blog.joycode.com/ghj/archive/2006/07/17/78818.aspx
而HttpContext.Cache与HttpContext.Current.Cache是一个东西。
用.NET Reflefctor看到
public static HttpContext Current
{
get
{
return (ContextBase.Current as HttpContext);
}
set
{
ContextBase.Current = value;
}
}
而HttpContext.Cache是
public Cache Cache
{
get
{
return HttpRuntime.Cache;
}
}
所以两个其实是一个东西。
再看Page.Cache,MSDN上说:“获取与该页驻留的应用程序关联的 Cache 对象。”理解起来貌似Page.Cache应该是HttpRuntime.Cache的子集。不过我自己做测试没有测试出差别,能力有限,关于这个这个的差别还请高人指教。
关于Cache类的具体使用方法,MSDN上写的很详细了。包括依赖项、相对时间与绝对时间的缓存过期。http://msdn.microsoft.com/zh-cn/library/8bx0tk8a(v=VS.85).aspx
缓存的在项目中的具体使用位置,这个要根据项目的规模大小来看了。有的就是在业务层理加上缓存的内容。有些大型的项目还会单独搞一个缓存层。这个经验不多就不敢说了。个人觉得在缓存层,用HttpRuntime.Cache更好,因为范围大。