实体框架查询针对负载测试中的一个请求多次执行

时间:2018-12-13 14:43:27

标签: c# entity-framework model-view-controller load-testing

在我继续解释该问题之前,需要一点背景知识。

我有一个记录日志的机制

  1. 开始和结束Http请求
  2. 实体框架执行的查询

因此,我创建了一个简单的“ AllowAnonymous” MVC操作方法,该方法运行一个简单的实体框架查询。我将其推送到我们的DEV服务器,然后转到浏览器并调用该Action Method。检查日志,我看到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秒钟调用action方法。这是测试结果。

Netling报告(我从我的日志中确认)它运行了 345 个请求。 但是,Entity Framework运行查询的次数是 399 次。因此,以某种方式,Entity Framework对于少数请求运行查询一次以上。我一次只打一个电话,除了我之外,DEV服务器上没有任何人。

其他说明,我有时看到EF已打开和关闭的连接数等于请求的数量,有时它们等于查询执行的次数。但是,每当我进行负载测试时,查询执行的次数就会超过请求的次数。如果增加线程数,请求数和查询执行数之间的差距也会增加。

我的问题是,如果不是很明显,请求数( 345 )应该与查询执行的次数( 399 )相匹配。但事实并非如此,这意味着对于某些请求,查询将执行多次。为什么?我该如何解决?

0 个答案:

没有答案