MVC迷你档案器-LINQ开销

本文关键字:-LINQ 开销 档案 MVC | 更新日期: 2023-09-27 18:20:47

我使用的是MVC Mini Profiler,我试图衡量查询的LINQ到SQL部分(生成表达式树、实际的SQL命令等)与在数据库端花费的时间之间的影响。

我看到"此步骤中所有查询的聚合持续时间(不包括子查询)"。这包括LINQ到SQL部分和数据库调用,还是只包括数据库部分?当点击"sql"链接查看运行的查询列表时,我会看到查询持续时间。同样,这包括LINQ部分还是仅包括数据库端?

谢谢。

MVC迷你档案器-LINQ开销

SQL计时只是SQL-因为它来自封装的ADO.NET连接,对调用方知之甚少。要获得详细的时间安排(以衡量开销),请包装您感兴趣的代码:

using(profiler.Step("Get orders")) {
    orders = db.{some query}.ToList();
}

现在你有了代码单元的时间,中,有了相应的SQL时间。因此,如果"获取订单"代码花费了100ms,SQL花费了40ms,那么你就有了60ms的开销。

减少开销的方法:

  • 尝试预编译查询
  • 尝试切换到ExecuteQuery<T>,因此没有表达式树可解析

然而,根据经验,您可能会发现大多数开销来自"物化"(即将数据库中的行转换为对象),尤其是在高吞吐量场景中。我们发现摆脱这种开销的唯一方法是使用dapper-dot-net作为ExecuteQuery<T>的替代品(它有一个故意类似的API)。这样,我们在"获取订单"的时间和该块中SQL的时间之间几乎没有开销。