a) 当当前用户第一次访问 Profile 对象时,Asp.Net 是检索该用户的完整配置文件还是在调用时检索配置文件属性?
b) 在任何情况下,当前用户的配置文件数据是每次调用时从数据库中检索,还是仅检索一次,然后在当前请求期间保存?
谢谢
您没有指定这是网站项目还是 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 的建议。
如果要保存数据库调用,可以使用实用程序方法来缓存配置文件,或者您可以实现自己的自定义 MembershipProvider 来处理缓存。
在这种情况下,实用程序方法可能是最简单的解决方案,除非您想要实现其他功能,这些功能将通过实现自定义 MembershipProvider 来提供。
您可以参考此链接了解更多详细信息: 如何在不使用 Membership.GetUser() 的情况下访问 ASP.NET Membership 中的 UserId?
这是进行缓存的实用方法的示例。如果您有很多用户,您可以传递一个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);
}
}