ASP.NET MVC 3アプリケーション用のカスタム管理ページを作成していますが、これはユーザーをaspnet "アプリケーションサービス"データベースから取得するのに驚いています。ASP.NETメンバーシップデータベースとパフォーマンス
組み込みのMembership.GetAllUsers()メソッドは非常に遅いですが、ユーザーごとに大量の情報を取得するため、当然です。私たちはそれほど必要ではありませんので、私たちはaspnet dbの上にSQLレイヤーにLINQを投げ、LINQを使って独自のクエリを書くことにしました。
結果は改善されましたが、標準メソッドで120人を超えるビットをフェッチするのに約30秒かかっています。私たちのカスタムクエリでは9秒でした。
150行の9秒が巨大に見えます。どのようなアイデアがなぜそれほど長くかかるのですか?
EDITはここで何かを返すように9秒かかる方法の一例です:
public static List<LightMembershipUser> GetUsersInRole(string roleName) {
//Find the role
var roleId = (from role in db.Roles
where roleName == role.RoleName
select role.RoleId)
.First();
if (roleId==null){ return null; }
var res = from u in db.Users
join ur in db.UsersInRoles on u.UserId equals ur.UserId
join m in db.Memberships on u.UserId equals m.UserId
where ur.RoleId==roleId
select new LightMembershipUser { UserName = u.UserName, CreationDate = m.CreateDate, Email = m.Email, Roles = Roles.GetRolesForUser(u.UserName) };
return res.ToList();
}
コールドスタートまたは既に実行されているアプリケーションプールから測定しましたか? – jgauffin
@jgauffin:しました。 – guidupuy
このRails = Roles.GetRolesForUser(u.UserName)というビットは、Mystere Manのように150のクエリを実行していることを意味していませんか?あなたはSQLを見たことがありますか? –