Методы цепочки проблем производительности - PullRequest
0 голосов
/ 30 июня 2018

Я ищу рекомендации / предложения. У меня длительный процесс, который я пытаюсь оптимизировать. Это самый длительный процесс с длительностью 1 мин 48 с на один вызов для возврата заполненного списка. Я повторяю это по 1000 записей на запрос, чтобы вы могли представить, как быстро могут сложиться минуты. Я оптимизировал все другие методы до менее чем 10 секунд на 1000. Я хотел бы иметь возможность ускорить это.

  • GetLoans () получает данные из базы данных и отправляет их в GetLoanList (), чтобы создать коллекцию для отправки в спокойный веб-сервис.

  • GetRequestedWatches () возвращает строку типа «1,2», так что это действительно быстро.

  • переменные с предшествующим '_' являются свойствами уровня класса, которые загружаются при создании экземпляра.

Я пробовал Eager Loading и Lazy Loading. Стремительная загрузка до сих пор была лучшей.

Любые предложения будут оценены.

private List<SBLead> GetLoanList(IEnumerable<LoanCategoryMonitor> loans)
{
    return (loans.Where(selectedItem => selectedItem.Loan != null)
        .Select(selectedItem => new SBLead
        {
            ApiKey = _settings.apiKey,
            CrmId = selectedItem.LoanNumber.ToString(),
            CrmName = _crmName,
            LoanType = selectedItem.Loan.Loan_Type,
            Email = selectedItem.Loan.abcBorrower?.EMail_Address,
            FirstName = selectedItem.Loan?.Borr_First_Name,
            LastName = selectedItem.Loan?.Borr_Last_Name,
            Address = selectedItem.Loan?.Address,
            City = selectedItem.Loan?.City,
            State = selectedItem.Loan?.State,
            Zip = selectedItem.Loan?.Zip,
            Phone = string.Empty,
            WatchTypes = GetRequestedWatches(selectedItem.Category.GetEnumFromString<Category>()),
            UserEmail = _defaultLoanOfficerEmail,
            UserName = _defaultLoanOfficerName
        })).ToList();
}

public IEnumerable<LoanCategoryMonitor> GetLoans()
{
    var loanCollection = _be.LoanCategoryMonitors
        .Include(c => c.Loan)
        .Where(r => r.ReadyForUpdate == true && r.LoanExtracts == null &&
                    r.Category != Category.None.ToString())
        .AsNoTracking()
        .ToList();

    return loanCollection;
}

1 Ответ

0 голосов
/ 30 июня 2018

Я нашел это. Мне не хватало Включить для abcBorrower. Новая скорость выполнения почти мгновенная, и я могу жить с этим. это экономия 1 минуты 48 секунд на 1000 записей. Спасибо за ввод

enter image description here

Email = selectedItem.Loan.abcBorrower?.EMail_Address,
...