本文演示在 Visual C# .NET 中如何使用
@ OutputCache 指令在 ASP.NET 中控制页输出缓存。 您可使用此方法缓存您的站点的最常访问的网页,从而大大增加 Web 服务器的吞吐量。 吞吐量通常用每秒的请求量来衡量。 尽管本文中的示例演示如何使用
Duration 和
VaryByParam 属性,但是本文还简要介绍了可用于
@ OutputCache 指令的其他方法。
备注: 本文并不打算详细介绍
@ OutputCache 指令的所有属性及其可能的用途。有关更多信息,请参见
参考一节。
要求
- Microsoft Windows 2000 或 Windows XP
- Microsoft .NET 框架
- Microsoft Internet Information Server (IIS)
- ASP.NET Premium Edition
@ OutputCache 指令简介
若要使用
@ OutputCache 指令来控制页输出缓存,只需将该指令添加到网页的顶部。
Page.InitOutputCache 方法将该指令转换为
HttpCachePolicy 类方法。
@ OutputCache 指令包括以下属性和设置:
- Duration: 此属性指定项目保留在缓存中的时间。 Duration 的值用秒列出。
- VaryByParam: 此属性由 Get 或 Post 参数确定缓存项目。 例如,如果为 VaryByParam 属性设置了名为 testVal 的 QueryString 变量,则包含 testVal 的不同值的每个页请求都缓存在一个单独的页中。 以下代码阐释 VaryByParam 属性的语法:
<%@ OutputCache Duration="Seconds" VaryByParam="testVal"%>
备注: 可指定星号 (*) 以便缓存项目的所有不同版本。 同样,如果缓存的项目只有一个版本,则可指定“none”。 - Location: 此属性确定要缓存项目的位置。 可指定以下位置:
- Any
- Client
- Downstream
- Server
- None
以下代码阐释 Location 属性的语法:
<%@ OutputCache Duration="Seconds" Location="Client" %>
- 以下代码阐释VaryByCustom: 此属性包含默认设置 Browser,这意味着对于请求某个项目的每个浏览器版本都缓存一个不同的项目实例。 例如,Microsoft Internet Explorer 5 和 Internet Explorer 5.5 都请求该项目。 如果 VaryByCustom 设置为 Browser,则对于每个浏览器版本都有一个缓存项目。 您不能提供用于控制其他自定义方案的缓存的字符串。 如果您不提供用于重写 Global.asax 文件中 HttpApplication.GetVaryByCustomString 方法的代码,则该字符串没有任何意义。
以下代码阐释 VaryByCustom 属性的语法:
<%@ OutputCache Duration="Seconds" VaryByCustom="string" %>
- 以下代码阐释VaryByHeader: 此属性用于指定一个特定的 HTTP 标头值作为确定不同缓存项目的准则。 以下代码阐释 VaryByHeader 属性的语法:
<%@ OutputCache Duration="60" VaryByHeader="Accept-Language" %>
创建 @ OutputCache Duration 示例的步骤
以下步骤演示如何使用页输出缓存的
Duration 属性指定项目缓存的时间。
- 新建 Visual Basic ASP.NET Web 应用程序项目,方法如下:
- 打开 Visual Studio .NET。
- 在文件菜单上,指向新建,然后单击项目。
- 在添加新项目对话框中,单击项目类型下面的 Visual C# 项目,然后单击模板下面的 ASP.NET Web 应用程序。 在名称文本框中,键入 OutputCacheDemo,然后单击确定。
- 在 Visual Studio .NET 中新建一个 .aspx 页,方法如下:
- 在解决方案资源管理器中,右键单击该项目节点,单击添加,然后单击添加 Web 窗体。
- 在名称文本框中,键入 OutputCacheDuration.aspx,然后单击打开。
- 删除 Visual Studio .NET 添加到此页上的默认代码。
- 突出显示以下代码,右键单击该代码,然后单击复制。 在 Visual Studio .NET 中,单击编辑菜单上的粘贴为 HTML,将该代码粘贴到该 .aspx 页中:
<%@ OutputCache Duration="20" VaryByParam="none"%>
<HTML>
<HEAD>
<script language="C#" runat="server">
void Page_Load(object sender, EventArgs e)
{
Label1.Text = "Time:" + DateTime.Now.TimeOfDay.ToString();
}
</script>
</HEAD>
<body>
<STRONG>@ OutputCache Duration Sample</STRONG>
<hr>
<br>
<asp:Label id="Label1" runat="server">Label</asp:Label>
<br>
</body>
</HTML> - 从文件菜单中,单击保存 OutputCacheDuration.aspx 以保存该页。
- 在集成开发环境 (IDE) 中,从生成菜单中单击生成。
- 若要运行该示例,请在解决方案资源管理器中右键单击 OutputCacheDuration.aspx,然后单击在浏览器中查看。
- 在该页出现在浏览器中之后,注意显示在该标签中的时间。
- 在浏览器中刷新该页。您会注意到时间与以前的时间相同。 如果在 20 秒时间间隔设置过期之后刷新该页,则会显示新缓存版本的页面。
备注: 如果是在外部浏览器中查看该页,可通过按 F5 键刷新它。 如果是在 Visual Studio .NET IDE 的内部浏览器中查看该页,可通过右键单击该页然后单击刷新来刷新它。
创建 @ OutputCache VaryByParam 示例的步骤
以下步骤演示如何使用页输出缓存的
VaryByParam 属性,以便根据它的
QueryString 变量的某个值允许存在页面的不同缓存版本。
- 在 Visual Studio .NET 中新建一个 .aspx 页,方法如下:
- 在解决方案资源管理器中,右键单击该项目节点,单击添加,然后单击添加 Web 窗体。
- 在名称文本框中,键入 OutputCacheVaryByParam.aspx,然后单击打开。
- 删除 Visual Studio .NET 默认添加到此页上的默认代码。
- 突出显示以下代码,右键单击该代码,然后单击复制。 在 Visual Studio .NET 中,单击编辑菜单上的粘贴为 HTML,将该代码粘贴到该 .aspx 页中:
<%@ OutputCache Duration="20" VaryByParam="testVal"%>
<HTML>
<HEAD>
<script language="C#" runat="server">
void Page_Load(object sender, EventArgs e)
{
Label1.Text = "Time:" + DateTime.Now.TimeOfDay.ToString();
}
</script>
</HEAD>
<body>
<P>
<STRONG>@ OutputCache VaryByParam Sample</STRONG>
</P>
<P>
<hr>
</P>
<P>
<br>
<asp:Label id="Label1" runat="server"></asp:Label>
<br>
<hr>
<a href=http://yourservername/OutputCacheDemo/OutputCacheVaryByParam.aspx?testVal=123">testVal(123)</a>
<br>
<a href=http://yourservername/OutputCacheDemo/OutputCacheVaryByParam.aspx?testVal=345">testVal(345)</a>
</P>
</body>
</HTML> 备注: 必须修改上述代码中的两个超级链接以符合您的 Web 服务器的名称。 此外,您可能注意到 VaryByParam 属性被设置为根据名为 testVal 的 QueryString 变量的值而变化。 这将导致名为 testVal 的 QueryString 变量的值相同的每个实例都缓存页输出。 - 从文件菜单中,单击保存 OutputCacheVaryByParam.aspx 以保存该页。
- 在 IDE 中,从生成菜单中单击生成。
- 若要运行该示例,请在解决方案资源管理器中右键单击 OutputCacheVaryByParam.aspx,然后单击在浏览器中查看。
- 在该页出现在浏览器中之后,单击 testVal(123)。 这将导致浏览器重新浏览该页,但是名为 testVal 的 QueryString 变量被设置为“123”。 注意出现的时间。
- 再次单击 testVal(123)。您会注意到时间与以前的时间相同。 页输出已经根据 testVal 变量的值进行缓存。
- 单击 testVal(345)。 注意,在该页上出现新时间。
- 再次单击 testVal(345)。 注意,以前的页输出被缓存并显示在浏览器中。
- 单击 testVal(123) 以返回到第一个实例。 注意,根据提供的 QueryString 变量的值出现了不同的页输出缓存版本。
疑难解答
- 在使用 VaryByParam 时,一定要注意 QueryString 变量大小写的变化会导致额外的缓存项目。
- 切记,Duration 是用秒进行指定的。
- 在使用 VaryByCustom 并改写 Global.asax 文件中的 HttpApplication.GetVaryByCustomString 方法时,如果针对该属性提供的自定义字符串未找到任何匹配,则使用 Browser 的默认设置。
有关页输出缓存的更多信息,请参阅以下 Microsoft Web 站点:
文章编号: 308375 - 最后修改: 2007年5月31日 - 修订: 3.3
这篇文章中的信息适用于:
- Microsoft ASP .NET(包含在 .NET 框架中)
- Microsoft Visual C# .NET 2002 标准版
| kbhowto kbhowtomaster kbgrpdsasp KB308375 |
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。