2010-06-10

ASP.NET缓存

生成高性能、可缩放的 Web 应用程序最重要的因素之一是能够在首次请求项时将这些项存储在内存中,不管它们是数据对象、页还是页的某些部分。 可以将这些项缓存或存储在 Web 服务器上或请求流中的其他软件上,如代理服务器或浏览器。 使您能够避免重新创建满足先前请求的信息,尤其是那些需要大量处理器时间或资源的信息。 ASP.NET 缓存允许您使用多种技术跨 HTTP 请求存储页输出或应用程序数据并对其进行重复使用。

ASP.NET 提供了两种您可以用来创建高性能 Web 应用程序的缓存类型。 第一种类型是输出缓存,它允许将动态页和用户控件响应存储在输出流(从发起服务器到请求浏览器)中任何具备 HTTP 1.1 缓存功能的设备上。 当后面的请求发生时,不执行页或用户控件代码,缓存的输出用于满足该请求。 第二种类型的缓存是应用程序数据缓存,可以使用它以编程方式将任意对象(如应用程序数据)存储到服务器内存中,这样您的应用程序可以节省重新创建这些对象所需的时间和资源。

输出缓存:

以声明方式设置页的可缓存性

在页中包含 @ OutputCache 指令,并定义 Duration 和 VaryByParam 特性。

在 @ OutputCache 指令中包含 Location 特性,并将其值定义为 OutputCacheLocation 枚举中的下列值之一:Any、Client、Downstream、Server、ServerAndClient 或 None。

下面的代码演示如何将页的可缓存性设置为 60 秒:

<%@ OutputCache Duration="60" VaryByParam="None"%>

保存页面的多个版本:

<%@ OutputCache Duration="60" VaryByParam="productId"%>

这样,形如

www.goodasp.net?productId=15

www.goodasp.net?productId=1357

的页面各自有一个缓存版本

或许我们在页面里一个dropdownlist ddlCustomer,一个grid gridBuyDetail,grid根据所选的dropdownlist的值

呈现详细信息,我们可以设置页面缓存为:

<%@ OutputCache Duration="60" VaryByControl="productId"%>

使用缓存配置文件以声明方式设置页的可缓存性

在应用程序的 Web.config 文件中定义缓存配置文件,在配置文件中包括 duration 和 varyByParam 设置。

下面的 配置元素定义名为 Cache30Seconds 的缓存配置文件,它将在服务器上将页缓存 30 秒之久。

<caching>

  <outputCacheSettings>

    <outputCacheProfiles>

      <add name="Cache30Seconds" duration="30"

        varyByParam="none" />

    </outputCacheProfiles>

  </outputCacheSettings>

</caching>

在使用配置文件的每个 ASP.NET 页中包含 @ OutputCache 指令,并将 CacheProfile 特性设置为 Web.config 文件中定义的缓存配置文件的名称。

下面的代码指定页应当使用名为 Cache30Seconds 的缓存配置文件:

<%@ OutputCache CacheProfile="Cache30Seconds" %>

出于以下原因之一,ASP.NET 可以从缓存中移除数据:

由于服务器上的内存不足,开始一个称为“清理”的过程。
由于缓存中的项已过期。
由于项的依赖项发生了更改