Кэширование пользовательского элемента управления на стороне сервера в asp.net - PullRequest
1 голос
/ 08 сентября 2010

Мое приложение asp.net активно использует пользовательские элементы управления и сильно загружено; Меня беспокоит то, что загрузка пользовательских элементов управления для каждого запроса (Page.LoadControl (controlPath)) в лучшем случае является неоптимальной. Я думал о кэшировании экземпляра загруженного пользовательского элемента управления в HttpRuntime, но я не знаю, как он будет себя вести, когда несколько соединений (потоков) будут пытаться извлечь его из кэша и изменить свойства - я думаю, что проблема там ждет. Любой хороший способ оптимизировать загрузку пользовательского контроля?

Опять же, я имею в виду кэширование пользовательского элемента управления, а не вывод html (который не имеет смысла, поскольку кэширование [вывод html] будет отличаться при каждом его использовании)

Спасибо!

1 Ответ

1 голос
/ 08 сентября 2010

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

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

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

Некоторые другие предложения по оптимизации:

  • Если вы используете только один или два элемента управления на страницу, а не загружаете их динамически, просто объявите их как часть страницы и сначала установите для их видимости значение false, а затем - true, когда они вам нужны.

  • Если пользовательский контроль действительно слишком медленный для вас, вы можете попробовать переписать его как WebControl и настроить макет в коде. Я не уверен, что дополнительная работа будет стоить каких-либо оптимизаций, которые могут быть получены там.

Я бы не стал предварительно оптимизировать что-либо, пока вы не узнаете, что это проблема. Вы действительно сталкиваетесь с проблемами производительности с LoadControl()?

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