Кэширование нескольких версий вывода пользовательского элемента управления

Visual Studio 2010

Обновлен: Ноябрь 2007

Можно выводить области кэширования страницы с помощью пользовательских элементов управления точно так же, как и изменять версии страницы с кэшированным выводом. Это можно выполнить, изменив вывод пользовательского элемента управления с помощью имени элемента управления и строки запроса GET или значений параметров формы POST, или же изменив вывод только с помощью значений параметров. Также можно кэшировать на странице несколько версий пользовательского элемента управления с помощью объявления этого элемента управления более одного раза в содержащем ASPX-файле. Можно использовать любой из этих методов, независимо от того, указано ли кэширование вывода для элемента управления пользователя с помощью директивы @ OutputCache в ASCX-файле или с помощью атрибута PartialCachingAttribute при разработке пользовательского элемента управления в классе с выделенным кодом.

Директива @ OutputCache для пользовательского элемента управления поддерживает четыре атрибута: VaryByParam, VaryByCustom, VaryByControl и Shared. Класс PartialCachingAttribute включает четыре свойства VaryByParams, VaryByControls, VaryByCustom и Shared, которые позволяют использовать те же методики с помощью добавления атрибута к пользовательскому элементу управления в классе с выделенным кодом.

Если страница ASP.NET, которая содержит пользовательский элемент управления с параметрами кэша вывода, запрашивается в первый раз, экземпляр вывода элемента управления сохраняется в память. По умолчанию при запросе каждая страница, содержащая тот же самый пользовательский элемент управления, будет добавлять в память еще один экземпляр вывода элемента.

Например, создав пользовательский элемент управления с именем Sample.ascx и параметрами кэширования вывода и добавив Sample.ascx на двадцать пять страниц ASP.NET в данном приложении, можно получить по крайней мере столько же вариантов файла Sample.ascx, сохраненных в кэше вывода. Кроме этого, если использовать атрибуты VaryByControl, VaryByCustom или VaryByParam, чтобы изменить поведения кэширования пользовательского элемента управления, то в кэше может оказаться еще больше версий пользовательского элемента управления. Например, предположим, что в пользовательский элемент управления включен веб-серверный элемент управления TextBox, и свойству ID последнего задано значение MyTextBox. Если атрибуту VaryByControl задать значение MyTextBox, то в кэше будут сохранены версии вывода пользовательского элемента управления для каждого значения, получаемого элементом управления MyTextBox.

Если один и тот же элемент управления используется на нескольких страницах с одинаковым приложением, можно освободить память, задав для атрибута пользовательского элемента управления Shared директиву @ OutputCache равной true, или задав свойству Shared атрибута элемента управления PartialCachingAttribute значение true. Это значит, что каждая страница будет обращаться к одному и тому же экземпляру вывода пользовательского элемента управления. Использование свойства Shared в пользовательских элементах управления, которые часто используются и часто кэшируются, экономит значительное количество памяти.

В этом состоит основная разница между добавлением в кэш вывода результатов вывода пользовательских элементов управления и кэшированием результатов вывода страницы. Хотя кэш вывода поддерживает использование параметров строки запроса GET и формы POST для создания и кэширования нескольких вариантов вывода, как для страниц, так и для элементов управления, пользовательские элементы управления не поддерживают кэширование, основанное на заголовках HTTP.

Существует четыре методики изменения кэшируемого вывода для пользовательских элементов управления:

  • Можно использовать атрибуты VaryByParam свойства VaryByParams класса PartialCachingAttribute, которые предоставляют такие же функциональные возможности, как для кэша вывода страницы. В качестве значения можно задать любую строку, однако необходимо убедиться, что эта строка эквивалентна параметрам строки запроса GET или формы POST, которые связаны с созданным элементом управления.

  • Можно использовать атрибут VaryByControl свойства VaryByControls класса PartialCachingAttribute, чтобы изменять кэшированный пользовательский элемент управления в соответствии со свойством ID серверного элемента управления ASP.NET, содержащегося в пользовательском элементе управления.

  • Можно использовать атрибут VaryByCustom или свойство VaryByCustom класса PartialCachingAttribute для определения кода пользовательской строки, в зависимости от которой следует изменять вывод кэшированного пользовательского элемента управления. Это работает так же, как и применение атрибута VaryByControl для изменения кэширования вывода страницы. Дополнительные сведения см. в разделе Практическое руководство. Кэширование версий страницы на основании пользовательских строк.

  • Можно включить в состав страницы ASP.NET несколько экземпляров пользовательского элемента управления. Вывод для каждого экземпляра элемента управления будет кэширован, если не задать атрибуту Shared директивы @ OutputCache значение true.

Дополнительные сведения о каждом из этих разделах см. в разделах Практическое руководство. Кэширование нескольких версий пользовательского элемента управления на основании параметров и Практическое руководство. Кэширование нескольких версий пользовательского элемента управления с помощью декларативных атрибутов.

Показ: