簡體   English   中英

ASP.NET CORE MVC 加載表頁耗時太長

[英]ASP.NET CORE MVC Loading table page takes too long

我有一張訂單表(大約 8000 條記錄),該表需要幾秒鍾才能加載。

原因是頁面上顯示的字段之一是從另一個表 (returnProductName) 中檢索的。

刪除此 function 時,表格加載速度很快。

加載記錄時,我使用的是 Skip and Take,但是在檢索產品名稱時,我正在迭代所有訂單,因為如果用戶想按產品名稱搜索,它將顯示該產品的所有結果。

產品表不大(大約70條記錄)

我不明白為什么 function 會使頁面加載如此緩慢。

我知道我可以將產品名稱列添加到表中並在添加新訂單時填充它,但這聽起來不對,

誰能告訴我這個延遲的原因?

返回產品名稱 Function:

public string returnProductName(int productId)
  {
   return (_unitOfWork.Product.GetAll().Where(q => q.Id == productId).Select(q => 
           q.ProductName)).FirstOrDefault();
  }

加載頁面數據的Function:

    [HttpPost]
    public ActionResult GetList()
    {
        //Server Side parameters
        int start = Convert.ToInt32(Request.Form["start"].FirstOrDefault());
        int length = Convert.ToInt32(Request.Form["length"].FirstOrDefault());
        string searchValue = Request.Form["search[value]"].FirstOrDefault();
        string sortColumnName = Request.Form["columns["+Request.Form["order[0][column]"]+"][name]"].FirstOrDefault();
        string sortDirection = Request.Form["order[0][dir]"].FirstOrDefault();
        List<Order> orderList = new List<Order>();
            orderList = _unitOfWork.Order.GetAll().ToList();//Working Fast
        int totalRows = orderList.Count;
        foreach (Order order in orderList)
        {
            order.ProductName = returnProductName(order.ProductId);
         }
        if (!string.IsNullOrEmpty(searchValue))
        {
            orderList = orderList.Where(x => x.FullAddress.ToLower().Contains(searchValue.ToLower())
                                        x.Id.ToString().Contains(searchValue.ToLower()) ||
                                        x.OrderStatus.ToLower().Contains(searchValue.ToLower()) ||
                                        x.ProductName.ToLower().Contains(searchValue.ToLower()) |||
                                        x.Quantity.ToString().Contains(searchValue.ToLower()) ||
                                        x.Cost.ToString().Contains(searchValue.ToLower()) ||
                                        (!string.IsNullOrEmpty(x.TrackingNumber)  && x.TrackingNumber.ToString().Contains(searchValue.ToLower()))
            ).ToList<Order>();
        }
        int totalRowsAfterFiltering = orderList.Count;
        orderList = orderList.Skip(start).Take(length).ToList<Order>();
        return Json(new { data = orderList, draw = Request.Form["draw"], recordsTotal = totalRows ,
                    recordsFiltered = totalRowsAfterFiltering});
    }

我可能會考慮更新GetAll()方法或創建另一個返回字典的方法。

在這種情況下GetAllById()然后更新我將重命名為GetProductName()returnProductName


// Or whatever your type is
public Dictionary<int, List<Product>> GetAllById()
{
   // your code..

   return data
      .GroupBy(x => x.Id)
      .ToDictionary(x => x.Key, x => x.ToList());
}


public string GetProductName(int productId)
{
   var products = _unitOfWork.Product.GetAllById();

   return products[productId].FirstOrDefault(q => q.ProductName);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM