Кэширование профилей из SqlProfileProvider - результат ProfileManager.GetAllProfiles

Я использую SqlProfileProvider на одном из моих веб-сайтов, и на одной странице мне нужно получить весь список профилей (это интранет).

Метод, который я использую, это ProfileManager.GetAllProfiles(). Проблема в том, что его производительность действительно плохая, и это значительно замедляет работу сайта.

Поэтому я думал о том, чтобы кэшировать результат вызова метода в области приложения как DataTable (так что я мог также фильтровать / искать по нему).

Моя проблема в том, что у меня есть несколько серверов, на которых запущено это веб-приложение, и я хотел бы, чтобы кэш синхронизировался. Я начал использовать memcached, но у меня возникли некоторые проблемы (поэтому я вернулся к мысли о кешировании в области приложения).

Итак, вот мои вопросы:

  • Будет ли эффективно хранить DataTable, содержащий профили, в объекте Application? Или можно хранить объекты в кэше и иметь их в наличии для всех клиентов / браузеров?
  • Можно ли добавить кэш-зависимость (SQL) в этот кеш?

1 ответ

Решение

Вы можете кэшировать части веб-страницы, которые будут зависеть от списка профилей, поместив их в пользовательский элемент управления и пометив его как кешируемый. Также можно определить срок действия политики кэширования SqlCacheDependency. Что касается расположения кэша, то каждый веб-сервер в ферме будет иметь свою собственную версию в памяти, но использование срока действия кэша гарантирует, что эта версия не будет синхронизирована с данными в БД.

Кэширование страниц или фрагментов является наиболее эффективным методом кэширования, поскольку в отличие от кэширования вашей модели (DataTable или чего-либо другого) вы не платите цену HTML-рендеринга.

Другие вопросы по тегам