Данные профиля ASP.NET кэшированы? - PullRequest
3 голосов
/ 11 августа 2010

Использует ли ASP.NET SQL Profile Provider кэширование?Я имею в виду, если я получу данные из профиля для пользователя, будет ли он попадать в БД для каждого запроса?

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

Редактировать:

http://msdn.microsoft.com/en-us/library/aa478953.aspx описывает процесс как

Когда вызваноSqlProfileProvider.GetPropertyValues, aspnet_Profile_GetProperties выполняет следующие действия:

  1. Запрашивает таблицу aspnet_Applications для преобразования ввода имени приложения в нее в идентификатор приложения.
  2. Запрашивает таблицу aspnet_Users для преобразования пользователявведите имя в ID пользователя.
  3. Запрашивает таблицу aspnet_Profile для полей PropertyNames, PropertyValuesString и PropertyValuesBinary для указанного пользователя.
  4. Обновляет дату последней активности пользователя в таблице aspnet_Users с помощьютекущая дата и время.

Ответы [ 2 ]

2 голосов
/ 11 августа 2010

С MSDN

Когда приложение запускается, ASP.NET создает класс ProfileCommon, который является динамически генерируемым классом, который наследует класс ProfileBase.Динамический класс ProfileCommon включает свойства, созданные из определений свойств профиля, указанных вами в конфигурации приложения.Экземпляр этого динамического класса ProfileCommon затем устанавливается как значение свойства Profile текущего HttpContext и доступен для страниц в вашем приложении.

Похоже, что объект Profile присоединен к текущемуHttpContext из запроса.Таким образом, если вы не создадите новый HttpContext, данные профиля загружаются и сохраняются здесь по первому запросу.

EDIT - Аллен поднял некоторые хорошие моменты для некоторого пояснения здесь -> данные профилязапрашивается в каждом запросе HttpRequest (например, при создании нового HttpContext).Но в рамках каждого запроса вызовы поставщика профилей для разных свойств не продолжают попадать в БД, только при первом вызове.

1 голос
/ 14 июня 2012

Да и нет

Поставщик использует «кэширование» один раз для каждого запроса, который обращается к данным профиля. Если вы не обращаетесь к данным профиля во время любого данного запроса, они не запрашиваются. Однако, если вы обращаетесь к данным профиля несколько раз в течение одного запроса (и не обновляете их), то их запрашивают только один раз.

Важным выводом является следующее: если вы обращаетесь к данным профиля по каждому запросу, то asp.net запрашивает базу данных один раз для запроса данных вашего профиля !.

Чтобы конкретно ответить на ваш вопрос: «Если я получу данные из профиля для пользователя, будет ли он попадать в БД для каждого [http] запроса?» Да, он будет попадать в базу данных каждый раз.

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

...