ASP.NET 缓存 @ OutputCache

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

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

@ OutputCache

以声明的方式控制 ASP.NET 页或页中包含的用户控件的输出缓存策略。

属性

Duration

页或用户控件进行缓存的时间(以秒计)。在页或用户控件上设置该属性为来自对象的 HTTP 响应建立了一个过期策略,并将自动缓存页或用户控件输出。

说明:

这是必选属性。如果未包含该属性,将出现分析器错误。

Location

OutputCacheLocation 枚举值之一。默认值为 Any

说明:

包含在用户控件(.ascx 文件)中的 @ OutputCache 指令不支持此属性。

CacheProfile

与该页关联的缓存设置的名称。这是可选属性,默认值为空字符串 ("")。

说明:

包含在用户控件(.ascx 文件)中的 @ OutputCache 指令不支持此属性。在页中指定此属性时,属性值必须与 outputCacheSettings 节下面的 outputCacheProfiles 元素中的一个可用项的名称匹配。如果此名称与配置文件项不匹配,将引发异常。

NoStore

一个布尔值,它决定了是否阻止敏感信息的二级存储。

说明:

包含在用户控件(.ascx 文件)中的 @ OutputCache 指令不支持此属性。将此属性设置为 true 等效于在请求期间执行以下代码:

            Response.Cache.SetNoStore();
Shared

一个布尔值,确定用户控件输出是否可以由多个页共享。默认值为 false。有关更多信息,请参见备注部分。

说明:

包含在 ASP.NET 页(.aspx 文件)中的 @ OutputCache 指令不支持此属性。

SqlDependency

标识一组数据库/表名称对的字符串值,页或控件的输出缓存依赖于这些名称对。请注意,SqlCacheDependency 类监视输出缓存所依赖的数据库中的表,因此当更新表中的项时,使用基于表的轮询时将从缓存中移除这些项。如果以值 CommandNotification 使用通知(在 Microsoft SQL Server 2005 中),则最终会使用 SqlDependency 类向 SQL Server 2005 服务器注册查询通知。

说明:

SqlDependency 属性的 CommandNotification 值仅在网页 (.aspx) 中有效。用户控件只能将基于表的轮询用于 @ OutputCache 指令。

VaryByCustom

表示自定义输出缓存要求的任意文本。如果赋予该属性的值为 browser,缓存将随浏览器名称和主要版本信息的不同而异。如果输入自定义字符串,则必须在应用程序的 Global.asax 文件中重写 GetVaryByCustomString 方法。

VaryByHeader

分号分隔的 HTTP 标头列表,用于使输出缓存发生变化。将该属性设为多标头时,对于每个指定标头组合,输出缓存都包含一个不同版本的请求文档。

说明:

设置 VaryByHeader 属性将启用在所有 HTTP 1.1 版缓存中缓存项,而不仅仅在 ASP.NET 缓存中进行缓存。用户控件中的 @ OutputCache 指令不支持此属性。

VaryByParam

分号分隔的字符串列表,用于使输出缓存发生变化。默认情况下,这些字符串与随 GET 方法属性发送的查询字符串值对应,或与使用 POST 方法发送的参数对应。将该属性设置为多个参数时,对于每个指定参数组合,输出缓存都包含一个不同版本的请求文档。可能的值包括 none、星号 (*) 以及任何有效的查询字符串或 POST 参数名称。

警告:

在 ASP.NET 页和用户控件上使用 @ OutputCache 指令时,需要该属性或 VaryByControl 属性。如果没有包含它,则发生分析器错误。如果不希望通过指定参数来改变缓存内容,请将值设置为 none。如果希望通过所有的参数值改变输出缓存,请将属性设置为星号 (*))。

VaryByControl

一个分号分隔的字符串列表,用于更改用户控件的输出缓存。这些字符串代表用户控件中声明的 ASP.NET 服务器控件的 ID 属性值。有关更多信息,请参见 缓存 ASP.NET 页的某些部分

说明:

在 ASP.NET 页和用户控件上使用 @ OutputCache 指令时,需要该属性或 VaryByParam 属性。

VaryByContentEncodings

以分号分隔的字符串列表,用于更改输出缓存。将 VaryByContentEncodings 属性用于 Accept-Encoding 标头,可确定不同内容编码获得缓存响应的方式。有关如何指定 Accept-Encoding 标头的更多信息,请参见 W3C 网站上的 Hypertext Transfer Protocol -- HTTP/1.1(超文本传输协议 -- HTTP/1.1)规范的 14.3 节。

备注

设置页输出缓存的值与通过 Cache 属性操作 SetExpiresSetCacheability 方法的过程相同。

如果 Web 窗体页要求用户查看授权,则输出缓存将 Cache-Control HTTP 标头设置为 private。有关所有这些主题的更多信息,请参见 缓存 ASP.NET 页

如果将 Shared 属性设置为 true,则多个 Web 窗体页可以访问缓存的用户控件输出。如果不将该属性设置为 true,默认行为是为包含用户控件的每一页缓存用户控件输出的一个版本。通过启用 Shared 属性,可能可以节省大量内存。有关更多信息,请参见 缓存 ASP.NET 页的某些部分

示例

下面的代码示例演示如何设置页或用户控件进行输出缓存的持续时间。

下一个代码示例演示如何指示输出缓存按页或用户控件的位置对它们进行缓存,并根据窗体的 POST 方法或查询字符串对窗体参数进行计数。每个收到的具有不同位置或计数参数(或两者)的 HTTP 请求都进行 10 秒的缓存处理。带有相同参数值的任何后继请求都将从缓存中得到满足,直至超过输入的缓存期。

<%@ OutputCache Duration="10" VaryByParam="location;count" %>
<%@ OutputCache Duration="100" VaryByParam="none" %>
posted @ 2010-12-30 15:47  TerryChou  阅读(391)  评论(0编辑  收藏  举报