2010-06-13 19 views
1

我正在學習這個ORM,因爲認爲這對大多數項目來說都是很好的技術。但大多數僱主都需要獲得ADO.NET和SQL。linq對sql,Entity Framework和NHibernate的性能如何?

這個ORM不會用在高負載系統(比如流行的網站)嗎? ORM將在哪些類型的項目中有用?使用ORM的高負載項目是什麼?

+0

什麼是你的題? – 2010-06-13 07:18:27

+0

請參閱此主題 - http://stackoverflow.com/questions/1377236/nhibernate-entity-framework-active-records-or-linq2sql – 2010-06-13 07:25:07

回答

1

如果您想獲得最佳性能,請不要使用ORM。也就是說,並不是應用程序的所有部分都需要最佳的性能,而好的ORM(定製或現成的)可顯着提高開發速度。

我不是ORMBattle網站的忠實粉絲,但搜索問題,包括在計算器上學期會給你更多的信息,瞭解.NET ORM性能:

http://www.google.com/search?q=site:stackoverflow.com+ormbattle

例如:

Testing custom ORM solution performance overhead - how to?

ORM (esp. NHibernate) performance for complex queries

好的ORM導致很少的開銷(在ADO.NET之上),並且在絕大多數情況下性能會很好。

當您需要額外的性能時,一個好的ORM將允許您輕鬆地「降級」(即更接近原始SQL性能)。

0

一切都取決於你的要求和你的架構。

當你有一個報告系統和一個非常好的簡單邏輯時,ORM是邪惡的。如果將實施一個版本庫模式可能會取得不錯的表現。

但是,正如我所說的一切取決於您的要求和架構。

看看CQRS(命令 - 查詢責任分離)here,這是一個有趣的系統設計方法。

0

看看Foundations of Programming,這是我開始的地方。

我喜歡使用一個ORM,我有一個關係Db與域模型(要持久化的對象)。我發現它可以節省開發時間並提供更簡潔的代碼。

關於您關於工作的文章,我也注意到了這一點。然而,我只能推測答案是他們仍然有那麼多.Net開發人員仍然在這裏學習(ORM),因爲框架不在他們的生產系統中。

我已經注意到了一些諮詢公司這似乎用運籌學和管理學(如果你是其中的一個公司,你不使用ORM,請更正此,我根據它在你的技術博客)

是IMeta(提供了NHibernate的商業支持)英國 機房應用程序(它們提供的課程和編寫使用NHibernate的應用程序)英國 EMC2(他們沒有在CodePlex上的whocanhelpme)

HTH

骨頭

1

ORM當然可以成爲性能殺手。我已經針對ADO.NET(數據集和數據收集器)測量了實體框架(v1)和LINQ to SQL的性能。 EF性能簡直是不可接受的,特別是在Web應用程序中,數據上下文將被創建並被非常頻繁地丟棄。 LINQ to SQL並不算太壞,但不符合高性能應用程序的要求。兩者的區別在於EF是一個雙層模型,沒有生成代碼來優化圖層之間的映射。 LINQ to SQL是單層,並不提供幾乎不同的定製;權衡是LINQ查詢更貼近關係模型,因此開銷更小。

概念 ORM肯定是有價值的;它會在應用程序級別產生更乾淨的代碼。但是沒有免費的午餐。我目前正在編寫一個自定義ORM,它將單個數據模型映射到SQL Server和Oracle,並且可以通過簡單的應用程序配置設置在服務器之間切換。但是,沒有LINQ IQueryable提供程序,所有查詢都以動態SQL編寫或生成,並作爲ADO.NET查詢運行。所有數據庫交互都與應用程序接口,作爲特定操作的方法調用,而實體類的IEnumerables作爲結果返回。性能在ADO.NET直接編碼的10%以內,但該性能級別是項目開始時的一個要求。雖然這個ORM的核心組件可以在任何項目中使用,但獲得ORM和高性能的唯一方法是避免任何即時映射,或者在圖層之間(如EF),或者將LINQ轉換爲SQL。 (寫這個非常痛苦,因爲我非常喜歡LINQ,但是映射的代價太大了,我確定LINQ to Objects既可以在ORM中運行,也可以在應用程序中與結果一起使用。)

相關問題