ORM(尤其是NHibernate)复杂查询的性能

时间:2009-10-01 00:19:48

标签: .net performance nhibernate orm

我的公司正在从头开始重写现有的应用程序。除其他任务外,此应用程序还针对订单和发票数据执行复杂的SQL查询,以生成销售报告。查询是根据用户选择的条件动态构建的,因此如果选择了许多条件,它们可能会非常复杂。目前,表现不错,但不是很好。

现在,对于新版本,我们想使用ORM,可能是NHibernate,因为它显然是唯一支持Oracle Lite的应用程序(该应用程序使用Oracle或Oracle Lite,具体取决于它是以连接模式还是以断开模式运行)。但我担心NHibernate生成的查询的性能。我之前曾与其他ORM合作过(Linq to SQL,Entity Framework),但查询非常简单,因此没有性能问题。

因此,在我决定使用ORM或保留纯SQL之前,我想知道这些工具处理外连接,子查询等场景的程度如何......你认为ORM(特别是NHibernate)适用于上述报告场景?我应该担心复杂查询的性能吗?

非常感谢任何反馈

3 个答案:

答案 0 :(得分:8)

this chart。目前没有DataObjects.Net,但它与EF和NHibernate相比的结果显示为here

EF的LINQ测试代码为here;其他工具的版本可以在同一个文件夹中找到。所有这些.cs文件都由a single T4 template生成,因此测试完全相同。在那里使用的模型是Northwind。

更多链接:

答案 1 :(得分:6)

NHibernate有一点学习曲线,但值得学习,因为花费的时间会多次付出代价。我会推荐NHibernate in Action一书来学习,因为它是一个很好的资源,涵盖了你的问题所要求的一切以及更多。

可以调整NHibernate性能(参见下面的链接),NHibernate具有强大的缓存机制。

http://www.codeproject.com/KB/database/NHibernate_Perf.aspx https://www.hibernate.org/hib_docs/nhibernate/html/performance.html

最终,性能将取决于谁在SQL中编写查询。

答案 2 :(得分:5)

如果您正在寻找具有全面高效的LINQ翻译器的ORM,我建议您尝试Entity FrameworkDataObjects.Net。我不确定Oracle Lite支持。 NHibernate的LINQ翻译器尚未完全完成。

无论如何,你现在可以做的最好的事情是下载领先的ORM工具,并通过分组,加入,子查询等对棘手的查询进行测试。