Запрос Entity Framework выполняется несколько раз для одного запроса при нагрузочном тесте - PullRequest
0 голосов
/ 13 декабря 2018

Немного предыстории, прежде чем я объясню проблему.

У меня есть механизм ведения журнала, который регистрирует

  1. Начало и конец запросов Http
  2. Запросы, которые Entity Framework выполняет

ИтакЯ создаю простой «AllowAnonymous» метод действия MVC, который запускает один простой Entity Framework Query.Я отправляю это на наш сервер DEV, захожу в браузер и вызываю этот метод действия.Проверьте логи, я вижу 1 Http-запрос и 1 запрос выполнен.Отлично!

    [AllowAnonymous]
    public ActionResult GetInvoiceById(int InvoiceId)
    {
        JsonResult mJson = new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet };
        try
        {
            var inv = GetInvoice(InvoiceId);

            mJson.Data = inv;
        }
        catch (Exception ex)
        {
            throw;
        }
        return mJson;
    }
    public InvoiceViewModel GetInvoice(int InvoiceId)
    {   
        var inv = Context.Invoices.Where(m => m.InvoiceId == InvoiceId)
            .Select(s => new InvoiceViewModel()
            {
                InvoiceId = s.InvoiceId,
                StatusId = s.StatusId,
                AttachmentTypeId = s.TypeId,
                ContentId = s.ContentId,
                CreatedDate = s.CreatedDate,
                UpdatedDate = s.UpdatedDate
            }).FirstOrDefault();

        return inv ?? new InvoiceViewModel();
    }

Теперь я хотел загрузить тестирование этого метода действия.Для этого я использовал Netling .

Поэтому я провел нагрузочный тест на 1 потоке в течение 60 секунд.Таким образом, он делает последовательные вызовы метода действия в течение 60 секунд.И вот результаты теста.

Netling сообщил (что я подтвердил из моих журналов), что он выполнил 345 запросов.Но число раз, когда Entity Framework выполнял запрос, составляет 399 раз.Так что каким-то образом Entity Framework выполняет запрос более одного раза для нескольких запросов.Я делаю только один звонок за раз, и на сервере DEV нет никого, кроме меня.

Дополнительные примечания. Иногда я вижу, что количество соединений, которые EF открывал и закрывал, равно количеству запросов, а иногда - числу выполнений запроса.Но всякий раз, когда я загружаю тест, количество выполнений запросов больше, чем количество запросов.Если я увеличу количество потоков, то также увеличится разрыв между количеством запросов и числом выполнений запросов.

Мой вопрос: если это еще не очевидно, количество запросов ( 345 ) должно соответствовать количеству выполненных запросов ( 399 ).Но это не так, это означает, что для некоторых запросов запрос выполняется несколько раз.Зачем?И как я могу это исправить?

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