a)当前用户第一次访问Profile对象时,是否为Asp.Net 检索该用户的完整配置文件,或者在调用时检索一个配置文件属性?
b)在任何情况下,是每次调用DB时从DB检索的当前用户的配置文件数据,还是仅检索一次,然后在当前请求期间保存?
感谢名单
答案 0 :(得分:1)
如果要保存数据库调用,可以使用实用程序方法来缓存配置文件,也可以实现自己的自定义MembershipProvider来处理缓存。
在这种情况下,实用程序方法可能是最简单的解决方案,除非您想要实现其他功能,这些功能将通过实现自定义MembershipProvider来实现。
您可以参考此链接了解更多详情: How can I access UserId in ASP.NET Membership without using Membership.GetUser()?
以下是执行缓存的实用程序方法示例。您可以传递一个slidingMinutesToExpire,使其在一段时间后从缓存中过期,以避免在有许多用户时消耗过多的服务器内存。
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);
}
}
答案 1 :(得分:1)
您不指定这是网站项目还是Web应用程序项目;在配置文件方面存在很大差异,因为它们没有为Web应用程序项目模板开箱即用:
http://codersbarn.com/post/2008/07/10/ASPNET-PayPal-Subscriptions-IPN.aspx
http://leedumond.com/blog/asp-net-profiles-in-web-application-projects/
您是否实际实施过它还是刚刚进入规划阶段?如果是后者,那么上面的链接应该提供一些有价值的信息。关于缓存问题,我会按照Dave的建议去做。