缓存用户控件输出的多个版本

更新:2007 年 11 月

就像可以改变已进行输出缓存的页的版本一样,您可以输出缓存具有用户控件的页的区域。通过根据控件的名称和 GET 查询字符串或窗体 POST 参数值,或只根据参数值改变用户控件输出,您可以完成该操作。通过在它所包含的 .aspx 文件中对用户控件进行多次声明,您也可以缓存页上用户控件的多个版本。您可以使用这些技术中的任何一个,无论是在 .ascx 文件中使用 @ OutputCache 指令指定用户控件的输出缓存,还是在代码隐藏类中开发用户控件时使用 PartialCachingAttribute

用户控件的 @ OutputCache 指令支持四种属性:VaryByParamVaryByCustomVaryByControlSharedPartialCachingAttribute 类包括四种属性:VaryByParamsVaryByControlsVaryByCustomShared,使用这些属性,您可以通过向代码隐藏类中的用户控件添加属性使用相同技术。

当首次对包含具有输出缓存设置的用户控件的 ASP.NET 页进行请求时,控件输出的实例将保存到内存中。默认情况下,包含同一用户控件的每一页都将会在请求该页时将控件输出的另一个实例添加到内存中。

例如,如果创建了一个具有输出缓存设置的用户控件 Sample.ascx,并将 Sample.ascx 添加到了应用程序的 25 个 ASP.NET 页中,则输出缓存中至少会存储 25 个 Sample.ascx 版本。另外,如果使用 VaryByControlVaryByCustomVaryByParam 属性修改用户控件的缓存行为,则缓存中将会有更多的用户控件输出版本。例如,假定您将 TextBox Web 服务器控件包含在用户控件中,并将其 ID 属性设置为 MyTextBox。如果将 VaryByControl 属性设置为 MyTextBox,则对于 MyTextBox 控件接收到的每个值,都将会有一个用户控件输出版本存储在缓存中。

如果在同一应用程序的多个页中使用了相同的用户控件,则可以通过以下方法来节省内存:将用户控件的 @ OutputCache 指令的 Shared 属性 (Attribute) 设置为 true,或将控件的 PartialCachingAttribute 属性 (Attribute) 的 Shared 属性 (property) 设置为 true。这意味着每个页都将访问用户控件输出的同一实例。对于经常使用和频繁缓存的用户控件,使用 Shared 属性可以节省大量的内存。

将用户控件输出添加到输出缓存中和对页输出进行相同的操作这两者存在一个主要区别。尽管两者的输出缓存都支持使用 GET 查询字符串和窗体 POST 参数创建和缓存输出的多个版本,但用户控件不支持基于 HTTP 标头的缓存。

您可以使用以下四种技术来改变输出缓存的用户控件:

有关这些主题的更多信息,请参见如何:根据参数缓存用户控件的多个版本如何:使用声明性的属性缓存用户控件的多个版本

请参见

任务

如何:根据参数缓存用户控件的多个版本

如何:使用声明性的属性缓存用户控件的多个版本

概念

ASP.NET 缓存概述

缓存 ASP.NET 页

缓存页的多个版本

其他资源

ASP.NET 缓存中的新增功能