Linq To Sql与Entity Framework性能对比

17

我一直在寻找最近的性能基准测试,比较L2S和EF,并且找不到使用发布版本的EF调用存储过程的测试。因此,我进行了一些自己的测试,并发现了一些有趣的结果。

这些结果看起来正确吗?我应该用不同的方式进行测试吗?

上下文的一个实例,调用存储过程一次: (链接已失效)

上下文的一个实例,多次调用相同的存储过程: (链接已失效)

上下文的多个实例,多次调用相同的存储过程: (链接已失效)


当您将上下文创建行放入using()块中时会发生什么?那些长时间的调用可能是由于系统在池中没有连接...? - Dave Markle
2
您可能还想测试更新、删除和插入的性能。 - DamienG
你的数据代码通常是这样的吗?它看起来似乎不像真正的数据访问代码...测试循环与真实的数据访问模式毫无共同之处。 - Jason Short
3个回答

9

我认为你应该以稍微不同的方式进行测试,以区分启动成本与执行成本。 特别是Entity Framework,由于需要编译数据库视图,因此具有相当大的启动成本(尽管可以提前完成此操作)。 同样,LINQ具有已编译查询的概念,如果多次执行查询,则适用。

对于许多应用程序来说,查询执行成本比启动成本更重要。 对于某些应用程序,情况可能相反。 由于它们的性能特征不同,因此我认为区分它们非常重要。 特别是将启动成本平均到重复执行的查询的平均成本中会产生误导。


但是这些结果不会反映在asp.net应用程序中的实际情况吗?由于我无法保持上下文“活动”,因此我必须在每个请求上创建一个新的上下文实例并调用存储过程。 - Vyrotek
不一定。您可以预编译实体框架视图,在这种情况下,当实例化上下文时,您不需要支付该成本。即使对于无法预编译的内容,将这些项单独跟踪可以澄清执行一个查询和执行100个查询之间的差异。 - Craig Stuntz

3

2
我做了几个ASP.NET页面的测试,试图看哪个表现更好。我的测试内容是:
删除10,000条记录 插入10,000条记录 编辑10,000条记录 将10,000条记录绑定到GridView并在页面上显示
我本以为LinqToSQL会更快,但是通过以上测试,LinqToSQL需要近2分钟,而LinqToEntities只需要不到20秒。
至少对于这个测试来说,LinqToEntities似乎更快。我的结果似乎也与你的相符。
虽然我没有尝试插入/编辑/删除/显示超过1个表连接在一起的情况。
我有兴趣了解更多……或者如果我的测试不是有效的测试类型,我很想看到一些真正的测试。

1
我知道这是一篇旧文章,但如果你仍然感兴趣,我已经对EF进行了一些测试,可以在这里找到(http://blog.staticvoid.co.nz/2012/03/entity-framework-comparative.html)。我发现L2S在更新方面要慢得多,但我很想知道为什么(以及是否有改进的方法)。不过,在选择方面,L2S要快得多。 - undefined
干得好。我对数据库和ORM并不是专家,但我喜欢你的测试展示的内容。我最近也读了ADO.net团队关于EF5改进的文章:http://blogs.msdn.com/b/adonet/archive/2012/02/14/sneak-preview-entity-framework-5-0-performance-improvements.aspx - dtc
谢谢,是的,EF团队最近在性能方面做了一些非常酷的事情,有趣的是,大部分都是在dot net 4.5内部完成的,而不是EF二进制文件,这很酷,因为它可以提升许多不同技术的性能。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接