Wir schreiben eine benutzerdefinierte Admin-Seite für unsere ASP.NET MVC 3-App und wir sind überrascht, wie lange es dauert, Benutzer aus der Aspnet "Application Services" -Datenbank zu greifen.ASP.NET-Mitgliedschaftsdatenbank und Leistung
Die integrierte Membership.GetAllUsers() -Methode ist mühsam langsam, aber verständlich, da es eine große Menge an Informationen für jeden Benutzer abruft. Wir brauchen nicht viel, also entschieden wir uns, eine LINQ-SQL-Schicht über unsere aspnet db zu werfen und unsere eigenen Abfragen mit LINQ zu schreiben. Anstatt alles abzurufen, erhalten wir nur ein paar Spalten - die einzigen, an denen wir interessiert sind.
Die Ergebnisse sind besser, aber immer noch: Es dauert etwa 30 Sekunden, um etwas mehr als 120 Benutzer mit der Standardmethode zu holen im Vergleich zu 9 Sekunden mit unserer benutzerdefinierten Abfrage.
9 Sekunden für 150 Zeilen scheint riesig. Irgendeine Idee, warum es so lange dauert?
EDIT Hier ist ein Beispiel für ein Verfahren, das 9 Sekunden dauert etwas zurück:
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();
}
Haben Sie an einem Kaltstart oder einem bereits laufenden App-Pool gemessen? – jgauffin
@jgauffin: Ich habe. – guidupuy
Bedeutet dieses Bit 'Roles = Roles.GetRolesForUser (u.UserName) ', dass Sie 150 Abfragen durchführen, wie Mystere Man vorgeschlagen? Hast du dir das SQL angesehen? –