a)現在のユーザーが初めてプロファイルオブジェクトにアクセスするとき、Asp.Netはそのユーザーの完全なプロファイルを取得しますか、それともプロファイルプロパティは呼び出されたときに一度に1つずつ取得されますか?
b)いずれの場合も、現在のユーザーのプロファイルデータは、呼び出されるたびにDBから取得されますか、それとも1回だけ取得されてから、現在の要求の期間中保存されますか?
ありがとう
これがWebサイトプロジェクトであるか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/
実際に実装しましたか、それとも計画段階ですか?後者の場合、上記のリンクはいくつかの貴重な情報を提供するはずです。キャッシングの問題に関しては、デイブのアドバイスを参考にします。
データベース呼び出しを保存する場合は、ユーティリティ メソッドを使用してプロファイルをキャッシュするか、キャッシュを処理する独自のカスタム MembershipProvider を実装できます。
カスタム MembershipProvider を実装することによって提供される、実装したい他の機能がない限り、ユーティリティ メソッドはおそらくこの場合の最も単純なソリューションです。
詳細については、このリンクを参照してください: How can I access UserId in ASP.NET Membership without using 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);
}
}