ASP.NET提供三种主要形式的缓存
      页面级输出缓存
      用户控件级输出缓存
      缓存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()方法使用该默认持续时间。