Кэширование вывода настраиваемого элемента управления (серверный элемент управления) - PullRequest
2 голосов
/ 17 сентября 2010

Я сталкивался с подсказками о кэшировании вывода серверного элемента управления, но пока не нашел однозначного ответа: можно ли кэшировать выходные данные серверного элемента управления (так же, как кэшируются пользовательские элементы управления)?

Мнения, с которыми я сталкивался, включают в себя кэширование данных (не истинное кэширование вывода) или предложение настройки параметров response.cache.В идеале я хотел бы иметь возможность перетаскивать серверный элемент управления на страницу и устанавливать свойства с теми же именами, что и в директиве outputcache:

Пример:

<cc1:MyCustomControl ID="ctl1" runat="server" CacheDuration="200" VaryByCustom="user" />

Я собиралсякопаться в фреймворке, чтобы увидеть, как на самом деле работает кэширование вывода, но надеялся найти какую-то информацию, чтобы начать меня.Из моего ограниченного понимания парсер решает, кэширован ли page / usercontrol.Поскольку серверные элементы управления не анализируются, не будет возможности остановить выполнение кода.Я полагаю, что мог бы инициализировать логическое значение IsInCache и убедиться, что все методы проверяют это var перед выполнением кода.Это не полностью исключает выполнение серверного элемента управления, но может повысить производительность достаточно, избегая обращений к базе данных и привязки данных к элементам управления.

Я все еще использую .NET 3.5 и не имелмного времени для изучения модели провайдера OutputCache в .NET 4.0.Может быть, есть решение в последней версии фреймворка?

Есть мысли?

1 Ответ

2 голосов
/ 19 ноября 2010

Я тоже искал это и решил, что добавлю решение на эту страницу, так как оно появилось в моем веб-поиске.Существует атрибут PartialCaching, который применяется к серверному / пользовательскому элементу управления для достижения того же эффекта, что и директива OutputCache, используемая в шаблонах ascx и aspx.Он принимает те же параметры (VaryByParameter и т. Д.), А также.Например:

[PartialCaching(1000, "foo", null, null)]
public class ClientScriptVariableBlock : Control {
  ...
}

Сантехника ASP обрабатывает это так же, как атрибут шаблона, поэтому конечный результат такой же.Это ценно (в моем случае), потому что я могу создать общие серверные элементы управления вне самого веб-проекта, которые можно кэшировать.Шаблоны ASCX не очень хорошо работают во внешних сборках:)

...