우리는 ASP.NET MVC 3 응용 프로그램 용 사용자 정의 관리 페이지를 작성하고 있으며 사용자는 aspnet "응용 프로그램 서비스"데이터베이스에서 얼마나 오래 걸리는지에 놀랐습니다.ASP.NET 회원 데이터베이스 및 성능
내장 된 Membership.GetAllUsers() 메서드는 매우 느리지 만 각 사용자에 대해 많은 양의 정보를 가져 오기 때문에 당연히 그렇게 느립니다. 우리는 aspnet db 위에 SQL 계층에 LINQ를 던지고 LINQ를 사용하여 자체 쿼리를 작성하기로 결정했습니다. 모든 것을 가져 오는 대신 몇 열만 가져옵니다.
결과가 더 좋지만 여전히 표준 방법으로 120 명 이상의 사용자를 가져 오는 데 약 30 초가 걸립니다. 우리의 커스텀 쿼리로 9 초가 걸렸다.
150 행 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
Molesere Man이 제안한 것처럼 'Roles = Roles.GetRolesForUser (u.UserName)'비트가 150 개의 쿼리를 수행한다는 것을 의미하지 않습니까? 생성 된 SQL을 보셨습니까? –