Проблема производительности при выполнении операций над объектами объекта - PullRequest
0 голосов
/ 07 января 2020

Я столкнулся с проблемой производительности в приведенном ниже коде в нескольких циклах foreach. Сначала я получаю список ReturnDetails, а затем на основе подробного идентификатора получаем объект HandlingInfo. Затем в зависимости от значения действия снова обновите объект ReturnsDetail.

Загрузка 3000 записей ReturnsDetail занимает больше минуты. При локальной отладке он выполняется бесконечное количество времени.

Пожалуйста, дайте мне знать, в любом случае, я могу изменить этот код.

Спасибо за вашу помощь.

 lstReturnsDetail = dcReturnsService.GetReturnDetailsInfo(header_id);

 List<HandlingInfo> lstHandlingInfo = null;
 foreach (ReturnsDetail oReturnsDetail in lstReturnsDetail)
 {
     using (DCReturns_Entities entities = new DCReturns_Entities())
     {
         lstHandlingInfo = entities.HandlingInfoes.Where(f => f.detail_id == oReturnsDetail.id).ToList();
         if(lstHandlingInfo != null)
         {
             foreach (HandlingInfo oHandlingInfo in lstHandlingInfo)
             {
                 if (oHandlingInfo.action == "DST")
                 {
                     oReturnsDetail.destroy += Convert.ToInt32(oHandlingInfo.qty);
                 }
                 else if (oHandlingInfo.action == "SHP")
                 {
                     oReturnsDetail.to_shop += Convert.ToInt32(oHandlingInfo.qty);
                 }
                 else if (oHandlingInfo.action == "RBX")
                 {
                     oReturnsDetail.in_stock += Convert.ToInt32(oHandlingInfo.qty);
                 }
             }
         }
     }

     oReturnsDetail.received_qty = oReturnsDetail.destroy + oReturnsDetail.to_shop + oReturnsDetail.in_stock;
 }

 dgReturnsDetail.DataSource = lstReturnsDetail.OrderByDescending(g => g.id).ToList();
 Session[DCReturnsConstants.Returns_Detail_Entity] = lstReturnsDetail;
 dgReturnsDetail.DataBind();

1 Ответ

0 голосов
/ 07 января 2020

это код su-do! но вы должны получить Jist.

//modify this to return all of them into mem, and then filter on this... 
//if it can not be done here then do below..
var lstReturnsDetail = dcReturnsService.GetReturnDetailsInfo(header_id);

//then create a list here which fetches all, 
List<[type]> somelist
List<int> listId = lstReturnsDetail.select(x=>x.id).tolist();
using (var db = new DCReturns_Entities())
{
    somelist = db.HandlingInfoes.Where(f =>  listId.Contains(  f.detail_id)).ToList();
}

foreach (ReturnsDetail oReturnsDetail in lstReturnsDetail)
{
    //performance issue is here
    //using (DCReturns_Entities entities = new DCReturns_Entities())
    //{
    //  lstHandlingInfo = entities.HandlingInfoes.Where(f => f.detail_id == oReturnsDetail.id).ToList();
    //} 

    //insead fetach all before, into mem and filter from that list.
    var lstHandlingInfo = somelist.Where(f => f.detail_id == oReturnsDetail.id).ToList();

    //code ommited for reaablity
}
//code ommited for reaablity
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...