Dot-Net

複雜查詢的 ORM(尤其是 NHibernate)性能

  • February 25, 2010

我的公司正在從頭開始重寫現有的應用程序。除其他任務外,此應用程序還針對訂單和發票數據執行複雜的 SQL 查詢以生成銷售報告。查詢是根據使用者選擇的標準動態建構的,因此如果選擇了許多標準,它們可能會非常複雜。目前,性能不錯,但不是很好。

現在,對於新版本,我們想使用 ORM,可能是 NHibernate,因為它顯然是唯一支持 Oracle Lite 的(應用程序使用 Oracle 或 Oracle Lite,取決於它是在連接模式下執行還是在斷開連接模式下執行)。但我擔心 NHibernate 生成的查詢的性能。我之前使用過其他 ORM(Linq to SQL、Entity Framework),但查詢非常簡單,因此沒有性能問題。

所以,在我決定使用 ORM 還是使用普通 SQL 之前,我想知道這些工具在處理外連接、子查詢等場景方面的能力如何……你認為 ORM(尤其是 NHibernate)是是否適合在上述報告場景中使用?我應該擔心複雜查詢的性能嗎?

任何回饋將不勝感激

請參閱此圖表。目前還沒有 DataObjects.Net,但它與 EF 和 NHibernate 的比較結果如下所示

EF 的 LINQ 測試程式碼在這裡;其他工具的版本可以在同一文件夾中找到。所有這些 .cs 文件均由單個 T4 模板生成,因此測試完全相同。那裡使用的模型是Northwind。

更多連結:

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 中一樣。

引用自:https://stackoverflow.com/questions/1501312