Кэширование пользовательского элемента управления в ASP.NET? - PullRequest
7 голосов
/ 20 февраля 2009

Я создал пользовательский элемент управления в своем приложении header.ascx, я вставляю атрибут selectedMenu в этот элемент управления, в котором элемент управления выбирает указанное значение selectedMenu. Предположим, я передал значение "home" или "search", после чего он выберет (выделит его) меню поиска.

Я хочу кешировать этот элемент управления. Когда значение атрибута selectedMenu изменяется, обновляется только кеш, иначе он должен получить элемент управления из кеша.

Возможно ли кэшировать пользовательский элемент управления в asp.net ?? Я использую ASP.NET 2.0 (C #)

Ответы [ 4 ]

6 голосов
/ 20 февраля 2009

Кэширование пользовательских элементов управления в ASP.NET называется Кэширование фрагментов . Это делается путем добавления директивы OutputCache вверху вашей страницы:

Вы не можете изменить кэш, установив свойство для элемента управления, поскольку элемент управления фактически не создается, если он найден в кэше. Если вы попытаетесь получить доступ к элементу управления в коде за его кэшированием, он будет нулевым.

Является ли условие, определяющее, должен ли элемент управления кэшироваться, или нет, что-то, что вы можете определить, посмотрев на текущий запрос? Если это так, вы можете использовать атрибут varbycustom (http://msdn.microsoft.com/en-us/library/system.web.ui.partialcachingattribute.varybycustom.aspx) директивы выходного кэша. Вы можете поместить туда любую нужную строку в качестве параметра и затем при оценке кэширования метод GetVaryByCustomString () из Global.asxa будет вызван , и вы можете указать логику того, должен ли элемент управления кэшироваться или нет.

5 голосов
/ 20 февраля 2009

Конечно можно! Это называется «Кэширование фрагментов». Вот ссылка на страницу Quickstarts и MS Knowledge Base . Дополнительно Google .

1 голос
/ 20 февраля 2009

Я не думаю, что это хорошая идея, чтобы кэшировать сам элемент управления:

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

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

Тогда в конце концов глупый вопрос: является ли этот контроль узким местом? Вам действительно нужен кеш?

0 голосов
/ 06 декабря 2009

Подводя итог

используя VaryByCustom, означает

1- Снова соберите элемент управления.
2- Наличие нескольких версий элемента управления в кеше. который будет использоваться при выполнении пользовательских условий .

Это хорошо только в том случае, если для создания элемента управления требуется много времени, и у нас есть ограниченное число кэшированных версий, чтобы не тратить память, и приложению необходимо будет получить доступ к свойствам элемента управления (пока он кэшируется «или ноль») ,

но не будет хорошо, если пользовательские условия зависят от свойств самого элемента управления. Я не могу получить к нему доступ, это ноль.

например, я хочу написать что-то вроде if (выбранное по умолчанию значение в списке стран НЕ США) затем пересобрать и кэшировать (дать ему другую строку)

В противном случае не

пока другие объекты пытаются получить доступ к списку стран, он проверит наличие нуля и установит в раскрывающемся списке стран значение США.

Работает с кэшированием данных. это единственный путь.

кто согласен?

Спасибо за ваше время

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...