我们可以使用Entity Framework来调用高CPU密集型查询吗?

问题描述 投票:1回答:2

如果我有非常耗费资源的SQL查询要写入DB以获取数据。是否建议使用实体框架使用存储过程调用来获取数据,或者我们是否应该坚持使用ADO.NET

.net entity-framework stored-procedures ado.net
2个回答
1
投票

SQL脚本是一个SQL脚本,无论编写或生成的是什么或由谁编写。如果使用最佳代码实现存储过程,那么它将表现良好。如果您的脚本中有浪费,不需要的操作,那么它将无法正常运行。如果脚本是使用Entity Framework生成的,并且它运行良好,那么在使用它时没有任何问题。如果它不是那么好,那么如果你想获得良好的性能,你将需要一个存储过程。

当您想知道实体框架生成的脚本是否运行良好时,您需要执行以下步骤:

  • 找出要执行的算法的复杂性
  • 创建一些测试用例并根据复杂性找出预期的计算时间
  • 如果计算时间低于预期时间,那么你需要找出为什么你的期望与你在启发式实验中遇到的现实相比是悲观的
  • 否则,如果计算时间较长,那么尝试在存储过程中自己实现相同的功能并比较性能
  • 如果计算时间大约是预期的时间,那么你不需要做任何事情,EF已经完成了任务

我很长一段时间没有使用.NET和EF,但据我记忆,在很多情况下,它往往会逐个收集记录,为每个记录执行一个单独的查询,即使它们可以通过单个查询,大大增加了复杂性。

因此,简而言之,EF在许多情况下表现良好,但如果您遇到缓慢,那么您需要找出其原因,如上所述。您将需要检查生成的脚本,以查看当单个脚本可以返回所有需要的记录时,是否写入n个脚本以获取n个记录。在这里,您可以看到收集生成的查询的方式:How do I view the SQL generated by the Entity Framework?


0
投票

EntityFramework / EntityClientDataProvider的主要职责是将LINQ-to-Entities或Entity SQL查询转换为底层数据库可以理解的SQL查询。它与ADO.Net数据提供程序通信,ADO.Net数据提供程序又从数据库发送或检索数据。最后,它使用ADO.Net Data Provider使用标准ADO.Net与数据库进行通信

因此,您的问题的答案是:它不会改变计算的功耗。

看看EF架构图。 EF Overview

© www.soinside.com 2019 - 2024. All rights reserved.