2010-09-17 2 views
2

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

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

Пример:

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

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

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

Любые мысли?

ответ

2

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

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

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

+0

Спасибо! Я определенно проверил бы это. Мое текущее решение включает в себя подклассификацию элементов управления .NET и переопределение каждого «On ...», чтобы события не поднимались для какого-либо элемента управления, который я указал с параметрами кэша. Я программно добавляю элемент управления в кеш с ключом на основе параметров «VaryBy ...», CacheDuration и т. Д. Он работает как шарм, но мне не нравится, что мне пришлось топать в нормальном жизненном цикле управления для его достижения. – ByteCrunchr

+0

На первый взгляд похоже, что невозможно изменить значения, определенные в атрибуте PartialCachingAttribute. Если он работает так же, как и директива OutputCache для управления пользователем, PageParser считывает атрибуты, поэтому нет способа вставлять какие-либо переменные данные в процесс. – ByteCrunchr

+0

Нет, я не думаю, что есть способ сделать это. – kprobst

 Смежные вопросы

  • Нет связанных вопросов^_^