Почему в моем приложении MVC производительность снижается после добавления этого кода? - PullRequest
0 голосов
/ 29 января 2019

Есть ли способ получить такую ​​же идею, которая заключается в том, чтобы установить день назад для этих значений, не оказывая большого влияния на время поиска?Без этого блока кода он загружает новую страницу менее чем за секунду.После добавления время между загрузками страниц составляет 6-7 секунд.

//incidents is an IQueryable

//Set date backwards one day if incident is entered during third shift after midnight
        for (var x = 0; x < incidents.Count(); x++){
            DateTime createdDate = incidents.ToList().ElementAt(x).DateCreated;
            TimeSpan createdTime = createdDate.TimeOfDay;
            if (createdTime > startTime && createdTime < endTime){
                incidents.Skip(x).First().DateCreated = new DateTime(2019,01,01);
            }
        }

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Скорее всего, это связано со многими вызовами .ToList(), .Skip() и .Count().Вместо этого попробуйте следующее:

foreach (var incident in incidents.ToList())
{
    var createdDate = incident.DateCreated;
    var createdTime = createdDate.TimeOfDay;
    var index = incidents.IndexOf(indcident);
    if (createdTime > startTime && createdTime < endTime){
        incidents.Skip(index).First().DateCreated = new DateTime(2019,01,01);
    }
}

И я не очень знаком с .Skip(), но не могли бы вы упростить код до этого?

foreach (var incident in incidents.ToList())
{
    var createdDate = incident.DateCreated;
    var createdTime = createdDate.TimeOfDay;
    if (createdTime > startTime && createdTime < endTime){
        incident.DateCreated = new DateTime(2019, 01, 01);
    }
}
0 голосов
/ 29 января 2019

Поскольку incidents является IQueryable, вы выполняете вызов базы данных 2x+1 раз .Один раз для Count, плюс один раз для ToList и один раз для Skip(x).First на каждый инцидент .

Вы можете попытаться вызвать ToList() до цикла и обработать гидратированный список, чтобы увидеть, улучшается ли производительность.

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