Данные профиля для текущего пользователя извлекаются только один раз - PullRequest
1 голос
/ 16 ноября 2009


a) Когда текущий пользователь впервые обращается к объекту Profile, делает ли Asp.Net получить полный профиль для этого пользователя или свойства профиля извлекаются по одному при вызове?


b) В любом случае, данные профиля для текущего пользователя извлекаются из БД каждый раз, когда он вызывается, или они извлекаются только один раз, а затем сохраняются в течение текущего запроса?


* 1014 спасибо *

Ответы [ 2 ]

1 голос
/ 16 ноября 2009

Вы не указываете, является ли это проектом веб-сайта или проектом веб-приложения; Что касается профилей, то есть большая разница, поскольку они не реализованы из коробки для шаблона проекта веб-приложения:

http://codersbarn.com/post/2008/07/10/ASPNET-PayPal-Subscriptions-IPN.aspx

http://leedumond.com/blog/asp-net-profiles-in-web-application-projects/

Реализовали ли вы это на самом деле или вы только на стадии планирования? Если последнее, то приведенные выше ссылки должны предоставить некоторую ценную информацию. Что касается вопроса о кешировании, я бы советовался с Дейвом.

1 голос
/ 16 ноября 2009

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

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

Вы можете обратиться к этой ссылке для более подробной информации: Как получить доступ к идентификатору пользователя в членстве ASP.NET без использования Membership.GetUser ()?

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

public static void AddToCache(string key, Object value, int slidingMinutesToExpire)
{
    if (slidingMinutesToExpire == 0)
    {
        HttpRuntime.Cache.Insert(key, value, null, System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.NotRemovable, null);
    }
    else
    {
        HttpRuntime.Cache.Insert(key, value, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(slidingMinutesToExpire), System.Web.Caching.CacheItemPriority.NotRemovable, null);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...