EF6 SQLQuery非常慢但数据库速度非常快

Ran*_*Des 11 .net c# profiling entity-framework visual-studio-2013

我有一个性能问题,我们做了一堆分析,并被卡住了.希望你们其中一个人之前见过这个.

我调用DbContext.Database.SqlQuery数据库部分需要3ms,但完整执行需要9秒.

我们使用EF Profiler来发现这一点,我们也直接在SQL Server Management Studio中运行SQL,它是即时的.

我们也使用了一瞥而无法深入了解这个过程.

结果类型不是模型中的实体,因此我们确信不涉及跟踪.

我们也知道这不是针对上下文执行的第一个查询,因此我们不会在此查询上支付EF启动成本.

我们尝试过.net分析器,运行它有很多问题我们决定我们应该问.

有关如何挖掘和解决这个问题的任何提示?

编辑:此查询的结果集是1行,4列(十进制)

代码行只是:

var list=contextInstance.Database.SqlQuery<nonEntityType>(sqstring).ToList();
Run Code Online (Sandbox Code Playgroud)

SQL本身不是一个很长的字符串.我们将使用更详细的分析器来找出过程中的这个问题.

Fra*_*uma 1

我们使用 EF Profiler 来发现这一点,并且我们还直接在 SQL Server Management Studio 中运行 SQL,而且它是即时的。

这并不能证明什么。查询可能运行得很快,但数据可能会产生 100MB 的数据,然后将其传输到客户端并具体化为对象。这可能需要比您想象的更多的时间。

SSMS 中的查询可能会立即返回,因为它仅显示部分数据。你没说数据是什么。

使用真正的 .NET 分析器,例如 dotTrace 或 Ants。这样你就可以准确地看到时间在哪里被浪费了。EF Prof(或我自己的 ORM Profiler:http://www.ormprofiler.com)将告诉您所采取的总路线的哪一部分(ORM->DB->ORM)花费了多少时间。甚至 EF 教授也这样做;)

  • 它将显示从 con Open 到 con close 哪个部分花费了多少时间以及调用堆栈。如果连接打开状态花费了 9 秒,则 EF 有故障,但 EF 教授也会告诉您这一点。vs' 分析器,算了吧。使用 dotTrace 或 ants,它会告诉你哪一行花了多少时间。需要你 10 秒。 (2认同)