我们正在为我们的 ASP.NET MVC 3 应用程序编写一个自定义管理页面,我们对从 aspnet“应用程序服务”数据库中获取用户所需的时间感到惊讶。
内置的 Membership.GetAllUsers() 方法非常缓慢,但可以理解,因为它为每个用户获取大量信息。我们不需要那么多,所以我们决定在我们的 aspnet 数据库之上添加一个 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();
}