Performance LINQ2SQL性能vs.定制DAL vs.NHibernate

Performance LINQ2SQL性能vs.定制DAL vs.NHibernate,performance,data-access-layer,Performance,Data Access Layer,给定一个简单的用户驱动、高流量web应用程序(无花哨的报告/BI): 如果我的最大目标是性能(而不是易维护性、易查询性等),那么我猜在大多数情况下,自己的DAL是最好的选择 然而,如果我选择Linq2SQL或NHibernate,我们大概会谈论什么样的性能影响?10%? 20%? 200%? 在这两种方法中,哪一种更快 有没有人有任何真实世界的数据可以说明这一点?(是的,我知道Stackoverflow在Linq2SQL上运行。)如果你知道你的东西(特别是SQL和ADO.NET),那么是的-很

给定一个简单的用户驱动、高流量web应用程序(无花哨的报告/BI):

如果我的最大目标是性能(而不是易维护性、易查询性等),那么我猜在大多数情况下,自己的DAL是最好的选择

然而,如果我选择Linq2SQL或NHibernate,我们大概会谈论什么样的性能影响?10%? 20%? 200%? 在这两种方法中,哪一种更快

有没有人有任何真实世界的数据可以说明这一点?(是的,我知道Stackoverflow在Linq2SQL上运行。)

如果你知道你的东西(特别是SQL和ADO.NET),那么是的-很有可能,你能够为你的特殊兴趣创建一个经过高度调整、高度优化的自定义DAL,并且总体上比像LinqtoSQL或NHibernate这样的通用ORM更快

至于有多少,如果不知道具体的表结构、数据和使用模式,这真的很难说。我记得Rico Mariani做了一些Linq-to-SQL与原始SQL的比较,他的最终结果是Linq-to-SQL的性能达到了高技能SQL程序员的90%以上

见:

在我的书中,这并不算太糟糕,特别是如果你把你获得的生产力收益考虑进去的话——但这始终是一个巨大的权衡:生产力与原始绩效

与DataReader和DataTable性能相比,下面是关于实体框架和Linq to SQL的另一个例子


不幸的是,对于NHibernate,我没有任何这样的数字。

在两个高流量的web应用程序中,从ado.net重构ORM调用以使用存储过程只让我们在CPU和时间上改变了大约1-2%


从ORM到定制DAL是微观优化的一个练习。

此外,您还可以定制Linq到SQL的行为,从而专门优化某些元素(如果需要/可能)。