ASP.NET MVC 3 アプリのカスタム管理ページを作成していますが、aspnet の「アプリケーション サービス」データベースからユーザーを取得するのにどれだけの時間がかかるかに驚いています。
組み込みの Membership.GetAllUsers() メソッドは非常に遅いですが、ユーザーごとに大量の情報を取得するため、当然のことです。それほど多くは必要ないので、aspnet db の上に LINQ to SQL レイヤーを配置し、LINQ を使用して独自のクエリを作成することにしました。すべてを取得する代わりに、関心のある列のみを取得します。
結果は良くなりましたが、標準の方法で 120 人を少し超えるユーザーを取得するのに約 30 秒かかりましたが、カスタム クエリでは 9 秒かかりました。
150 行で 9 秒は巨大に思えます。なぜそんなに時間がかかるのですか?
編集何かを返すのに 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();
}