关于实体框架:Linq对实体的性能与ESQL

关于实体框架:Linq对实体的性能与ESQL

Performance of Linq to Entities vs ESQL

使用Entity Framework时,ESQL的性能是否比Linq to Entities更好?

我更喜欢对实体使用Linq(主要是由于强类型检查),但是我的其他一些团队成员则将性能作为使用ESQL的理由。 我想全面了解使用这两种方法的优点/缺点。


最明显的区别是:

Linq to Entities是强类型代码,包括不错的查询理解语法。" from"位于" select"之前的事实使IntelliSense可以为您提供帮助。

实体SQL使用传统的基于字符串的查询以及更熟悉的SQL之类的语法,其中SELECT语句位于FROM之前。因为eSQL是基于字符串的,所以动态查询可以在运行时使用字符串操作以传统方式进行组合。

不太明显的主要区别是:

Linq to Entities允许您使用" select new {...}"语法将形状更改或"查询"查询结果为所需的任何形状。 C#3.0新增的匿名类型允许这样做。

使用实体SQL不能进行投影,因为您必须始终返回ObjectQuery < T >。在某些情况下,可以使用ObjectQuery ,但是您必须解决.Select始终返回ObjectQuery 的事实。参见下面的代码...

1
2
3
4
5
6
7
8
9
10
11
12
ObjectQuery<DbDataRecord> query = DynamicQuery(context,
       "Products",
       "it.ProductName = 'Chai'",
       "it.ProductName, it.QuantityPerUnit");

public static ObjectQuery<DbDataRecord> DynamicQuery(MyContext context, string root, string selection, string projection)
{
    ObjectQuery<object> rootQuery = context.CreateQuery<object>(root);
    ObjectQuery<object> filteredQuery = rootQuery.Where(selection);
    ObjectQuery<DbDataRecord> result = filteredQuery.Select(projection);
    return result;
}

团队成员之一在此处和此处详细描述了其他更细微的差异。


ESQL还可以生成一些特别有害的sql。我不得不跟踪使用继承类的查询的问题,我发现我的4行小巧的ESQL被翻译成100000个字符的怪兽SQL语句。

用Linq做同样的事情,并且编译后的代码更易于管理,比方说20行SQL。

另外,正如其他人所提到的,Linq是强类型的,尽管在没有编辑并继续功能的情况下进行调试非常烦人。

广告


在这里显示性能比较的漂亮图形:
实体框架性能探索
ESQL和实体之间没有太大差异
但在使用实体而不是直接查询时,总体差异很大

实体框架使用两层对象映射(与LINQ to SQL中的单层相比),并且附加映射会降低性能。至少在EF版本1中,仅当建模和ORM映射功能可以证明该成本合理时,应用程序设计人员才应选择实体框架。


与LINQ to Entities相比,Entity-SQL(eSQL)使您更轻松地执行诸如动态查询之类的事情。但是,如果您没有需要eSQL的场景,那么我将不愿意在LINQ上依赖它,因为它将很难维护(例如,不再进行编译时检查等)。

我相信LINQ也可以让您预编译查询,这可能会提高性能。 Rico Mariani不久前在博客中发表了有关LINQ性能的文章,并讨论了编译查询。


您可以用更多的代码来检查编译时间,这对我来说比性能要高得多。话虽这么说,在这个阶段我可能倾向于ESQL不仅是因为性能,而且(目前)它在功能上也更加灵活。没有比使用没有真正需要的功能的技术堆栈更糟糕的了。

实体框架不支持自定义属性,自定义查询(当您需要真正调整性能时)之类的功能,并且与linq-to-sql的功能不同(即,有些功能根本无法在实体中使用)框架)。

我对Entity Framework的个人印象是,它具有很大的潜力,但是在其当前状态下的生产环境中使用它的实现可能有点"僵化"。


对于直接查询,我使用linq到实体,对于动态查询,我使用ESQL。也许答案不是"要么/或",而是" //也"。


推荐阅读

    提高3A四核羿龙II游戏配置的性能

    提高3A四核羿龙II游戏配置的性能,,以节能环保为主题的IT产业,目前3A低端平台处理器、主板芯片组、独立开发卡性能突出,特别是在与AMD的处理

    优化PostgreSQL中的批量更新性能

    优化PostgreSQL中的批量更新性能,数据,表格,在Ubuntu 12.04上使用PG 9.1. 我们目前需要24小时才能运行大量UPDATE数据库上的语句,其形式

    诺基亚威图性能好到哪里

    诺基亚威图性能好到哪里,诺基亚,手机,诺基亚威图性能好到哪里这是一部以前列出的手机。即使当时配置不高,该品牌的手机也不依赖于该功能吸

    魅蓝note6性能参数有哪些

    魅蓝note6性能参数有哪些,摄像头,蓝牙,魅蓝note6性能参数有哪些魅力蓝色Note6最好拍照。电池寿命更长。蓝色Note6使用高通 snapdragon 625

    国产电脑cpu测试|国产CPU性能

    国产电脑cpu测试|国产CPU性能,,国产CPU性能天玑9000答: 天玑9000更厉害。因为天玑9000是 最新发布的cpu,也是现在的天花板。而麒麟9000是 2

    主流电脑cpu性能分析|cpu性能对比表

    主流电脑cpu性能分析|cpu性能对比表,,1. cpu性能对比表一、参数对比1、r7 5800H:制程工艺为7nm,主频3.2GHz,睿频4.4GHz,线程数是8核16线程,45W

    新老酷睿i3性能对比试验i34130和i33220

    新老酷睿i3性能对比试验i34130和i33220,,新的英特尔酷睿i3-4130 Haswell处理器架构已经推出了很长一段时间,虽然市场的时间还不长,已经成为