页面级输出缓存
用户控件级输出缓存
缓存API
页面级输出缓存
<%@ OutputCache Duration="60" VaryByParam="*" %>
如同其他页面指令一样,该指令应该出现在ASPX页面的顶部,即在任何输出之前。它支持五个属性(或参数),其中两个是必需的。
Duration 必需属性。页面应该被缓存的时间,以秒为单位。必须是正整数。
Location 指定应该对输出进行缓存的位置。如果要指定该参数,则必须是下列选项之一:Any、Client、Downstream、None、Server或ServerAndClient。
VaryByParam 必需属性。Request中变量的名称,这些变量名应该产生单独的缓存条目。“none”表示没有变动。“*”可用于为每个不同的变量数组创建新的缓存条目。变量之间用“;”进行分隔。
VaryByHeader 基于指定的标头中的变动改变缓存条目。
VaryByCustom 允许在global.asax中指定自定义变动(例如,“Browser”)。
在Cache中存储数据
Cache["key"] = "value";
Cache.Insert("dependentkey", myDependentData, new System.Web.Caching.CacheDependency(new string[] {}, new string[] {"key"}));
string cacheKey = "CustomersDataTable";
object cacheItem = Cache[cacheKey] as DataTable;
if((BypassCache) || (cacheItem == null))
{...}
几点需要注意:
某些值(例如,cacheKey、cacheItem和缓存持续时间)是一次定义的,并且只定义一次。
可以根据需要跳过缓存-例如,当注册一个新客户并重定向到客户列表后,最好的做法可能就是跳过缓存,用最新数据重新填充缓存,该数据包括新插入的客户。
缓存只能访问一次。这种做法可以提高性能,并确保不会发生NullReferenceExceptions,因为该项在第一次被检查时是存在的,但第二次检查之前就已经到期了。
该模式使用强类型检查。C#中的“as”运算符尝试将对象转换为类型,如果失败或该对象为空,则只返回null(空)。
持续时间存储在配置文件中。在理想的情况下,所有的缓存依赖项(无论是基于文件的,或是基于时间的,还是其他类型的依赖项)都应该存储在配置文件中,这样就可以进行更改并轻松地测量性能。我还建议您指定默认缓存持续时间,而且,如果没有为所使用的cacheKey指定持续时间,就让GetCacheSecondsFromConfig()方法使用该默认持续时间。