Вы можете определить функцию 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);
Конечно, Вы можете! Это называют "Кэшированием Фрагмента". Вот ссылка на страницу Quickstarts и Базу знаний MS. Кроме того, Google.
Я не думаю, что это - хорошая идея кэшировать само управление:
Лучший подход, я думаю, должен кэшировать данные, которые управление использует вместо этого. ASP.NET создает столько средств управления во время жизненного цикла страницы, то кэширование этого управления действительно ничего не улучшает.
Затем глупый вопрос в конце: действительно ли это управление является узким местом? Вам действительно нужен кэш?
Пользовательский элемент управления, кэширующийся в ASP.NET, называют кэшированием фрагмента. Это сделано путем добавления директивы OutputCache к началу страницы:
Вы не можете варьироваться кэш путем установки свойства на управлении, потому что управление на самом деле не создается, если это найдено в кэше. При попытке получить доступ к управлению в коде позади, это кэшируется, это будет пустым.
Условие, которое определяет, должно ли управление кэшироваться или не что-то, что можно определить путем рассмотрения текущего запроса? Если это, можно использовать атрибут varybycustom (http://msdn.microsoft.com/en-us/library/system.web.ui.partialcachingattribute.varybycustom.aspx) директивы выходного кэша. Можно поместить любую строку, которую Вы хотите там как параметр и затем когда кэширование будет оценено GetVaryByCustomString (), метод от Global.asxa назовут, и можно поместить логику для того, должно ли управление кэшироваться или не там.
Подводя итог
с использованием VaryByCustom, означает
1- Создайте элемент управления заново.
2- Наличие нескольких версий элемента управления в кеше. который будет использоваться, когда соблюдаются пользовательские условия .
Это хорошо, только если для создания элемента управления требуется много времени, и у нас есть конечное количество кэшированных версий, чтобы не тратить память, а приложение потребуется доступ к свойствам элемента управления (пока он находится в кэше "или null").
, но не будет хорошо, если эти пользовательские условия будут зависеть от самих свойств элемента управления. Я не могу получить к нему доступ, он пуст.
например, я хочу написать что-то вроде если (выбранное значение по умолчанию в списке стран НЕ США) затем перестройте и кэшируйте (укажите другую строку)
В противном случае не
, пока другие объекты пытаются получить доступ к списку contries, он проверит наличие null и установит в раскрывающемся списке стран США.
Кэширование данных сделает свою работу. это единственный способ.
кто согласен?
Спасибо за ваше время