如何优化数据表的加载行?

时间:2017-04-27 00:33:11

标签: c# sql-server datatable

我正在服务器端处理数据表,它从数据库中获取大约1000个伪/通用用户数据,并且每页加载10行。我现在编写代码的方式,只显示前10行至少需要2分钟。

我已经调试它以找到它花费这么长时间的原因是因为我获得了每个用户的角色并在数据表上显示它。当我注释掉获取角色部分并使用空字符串和List时,数据表加载速度很快。但我必须得到角色,而我却很难弄清楚如何去做。有人可以帮我解决这个问题吗?到目前为止,我一直在努力学习SQL部分并且没有成功。

private async Task<IEnumerable<UserViewModel>> GetUserData(ApplicationDbContext db)
{
    var users = db.Users;
    var list = await GetUsers(db, users);
    var vmlist = list.Select(item => new UserViewModel()
    {
        ID = item.ID,
        Username = item.Username,
        FirstName = item.FirstName,
        LastName = item.LastName,
        Email = item.Email,
        TaxID = item.TaxID,
        TaxIdHash = item.TaxIdHash,
        IV = item.IV,
        TaxIDEncrypted = item.TaxIDEncrypted,
        //RoleList = new List<string>(),
        //Roles = "",

        // This is the part giving me issues
        RoleList = RoleRepository.GetRolesByUserId(UserManager, item.ID, false),
        Roles = string.Join(",", RoleRepository.GetRolesByUserId(UserManager, item.ID, false).ToArray()),
    });

    return vmlist;
 }

我在此GetUserData方法中调用了UserGrid方法。

public async Task<ActionResult> UserGrid(DataTablesViewModel param)
{
    using (var db = new Infrastructure.Data.ApplicationDbContext())
    {
        db.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);

    var data = await GetUserData(db);

    IQueryable<UserViewModel> filteredUsers = data.AsQueryable();        

    List<UserViewModel> displayedTasks = filteredUsers.Skip(param.iDisplayStart).Take(param.iDisplayLength).ToList();

    int count = filteredUsers.Count();

    var result = GridHelper.GetData(displayedTasks);
    var json = Json(new
    {
        sEcho = param.sEcho,
        iTotalRecords = count,
        iTotalDisplayRecords = count,
        aaData = result
    },
JsonRequestBehavior.AllowGet);
    return await Task.FromResult(json);
}

}

我将需要RoleList,因为我稍后使用它来解密加密的SSN并显示其最后4个数字。

0 个答案:

没有答案