簡體   English   中英

NHibernate比經典的ODBC驅動程序更快嗎?

[英]Is NHibernate faster than a classic ODBC Driver?

我正在開發一個有點簡單數據模型的應用程序(4個表包括兩個小表,有大約10行,兩個更大,有數百行)。 我正在使用C#,目前使用OdbcDriver作為我的數據訪問層。 我想知道這個驅動程序或NHibernate之間的性能有什么不同嗎? 應用程序有效,但我想知道安裝NHibernate而不是經典的OdbcDriver會讓它更快嗎? 如果是這樣,差異真的值得安裝NHibernate嗎? (根據我從未使用過這種技術的事實)

謝謝!

簡短的回答:不,在大多數情況下,NHibernate實際上會降低你的表現。

更長的答案:NHibernate使用基本的ADO.NET驅動程序,包括OdbcConnection(如果沒有更好的),來執行實際的SQL查詢。 最重要的是,它使用不少的反射來將查詢消化到SQL中,並將SQL結果轉換為對象列表。 這個額外的層雖然靈活且功能強大,但它的執行速度比基於DataReader的硬編碼“firehose”解決方案要慢。

NHibernate可能會讓你獲得更快性能的外觀是“延遲加載”。 假設您有一個人員列表,每個人都有一個PhoneNumbers列表。 您正在從數據庫中檢索人員,只是為了獲取他們的名字。 基於DataReader的簡單實現可能涉及為People調用存儲過程,其中包括對其PhoneNumbers的連接,在這種情況下您不需要。 相反,NHibernate將僅檢索People,並將“代理”設置為對PhoneNumbers列表的引用; 當需要評估列表時,代理對象將執行另一個調用。 如果永遠不需要電話號碼,則永遠不會評估代理,從而省去了拔出不需要的電話號碼的麻煩。

NHibernate並不是要讓它變得更快,而且它只會像你一樣使用數據庫靈長類動物(它在“引擎蓋下”使用它們)。

在我看來,NHibernate關於創建一個可重用的實體層,可以應用於不同的應用程序,或者至少在一個大中型應用程序的多個區域中重用。 因此,將您的應用程序移動到NHibernate將浪費時間(聽起來非常小)。

通過為數據庫引擎使用特定的數據庫驅動程序,可能會獲得更好的性能。

對於數據庫中的數據量,它不會有任何區別。 但通常使用NHibernate會降低應用程序性能,但會提高開發速度。 但對於所有ORM來說,這通常是正確的。

提示:NHIbernate並不神奇。 它位於ADO.NET之上。 想要更快的驅動程序? 得到一個。 你為什么要使用像ODbc這樣的慢速過時的技術? 你的數據來源是什么? 他們不支持像OLEDB這樣的新標准嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM