Кэширование пользовательского элемента управления в ASP.NET?

Вы можете определить функцию conditional_reassign2() для получения std::unique_ptr по ссылке вместо по значению :

void conditional_reassign2(std::unique_ptr<MyClass>& ptr)
{
    if (my_condition)
    {
        ptr = std::make_unique<MyClass>(new_param);
    }
}

Таким образом, функция может напрямую измените передаваемый экземпляр, нет необходимости передавать права собственности.

Предполагая, что ptr является std::unique_ptr<MyClass>, тогда вызов conditional_reassign2() будет в этом случае:

conditional_reassign2(ptr);
7
задан Cerebrus 20 February 2009 в 09:26
поделиться

4 ответа

Конечно, Вы можете! Это называют "Кэшированием Фрагмента". Вот ссылка на страницу Quickstarts и Базу знаний MS. Кроме того, Google.

5
ответ дан 6 December 2019 в 21:20
поделиться

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

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

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

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

1
ответ дан 6 December 2019 в 21:20
поделиться

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

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

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

6
ответ дан 6 December 2019 в 21:20
поделиться

Подводя итог

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

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

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

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

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

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

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

Кэширование данных сделает свою работу. это единственный способ.

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

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

0
ответ дан 6 December 2019 в 21:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: