2009-02-20 2 views
6

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

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

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

ответ

5

Конечно, вы можете! Это называется «Кэширование фрагментов». Вот ссылка на Quickstarts page и MS Knowledge base. Кроме того, Google.

+0

lol +1 для google! Вы могли бы добавить эту ссылку в хороший вопрос об этом stackoverflow http://stackoverflow.com/questions/568837/caching-a-user-control-in-asp-net – Matt

6

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

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

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

+0

@Helephant, В этом случае я подозреваю, что они могли бы, вероятно, используйте VaryByControl. – LukeH

+0

Да, это был бы VaryByControl. – Cerebrus

1

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

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

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

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

+1

cahcing usercontrols - это как-то хорошая идея, потому что это экономит время рендеринга '(оптимизация производительности)' управления. конечно, когда он кэшируется, как только вы получите нулевую ссылку на странице, пока и до истечения срока действия кеша. –

+0

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

0

Резюмируя

с использованием VaryByCustom, означает

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

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

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

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

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

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

Данные cahing будут выполнять работу. Это единственный путь.

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

Thanks for ur time

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