NHibernate比经典的ODBC驱动程序更快吗?

时间:2011-03-25 14:45:49

标签: c# sql nhibernate odbc

我正在开发一个有点简单数据模型的应用程序(4个表包括两个小表,大约有10行,两个表更大,有几百行)。 我正在使用C#,目前使用OdbcDriver作为我的数据访问层。 我想知道这个驱动程序或NHibernate之间的性能有什么不同吗? 应用程序有效,但我想知道安装NHibernate而不是经典的OdbcDriver会让它更快吗?如果是这样,差异真的值得安装NHibernate吗? (根据我从未使用过这种技术的事实)

谢谢!

4 个答案:

答案 0 :(得分:10)

简短的回答:不,在大多数情况下,NHibernate实际上会降低你的表现。

更长的答案:NHibernate使用基本的ADO.NET驱动程序,包括OdbcConnection(如果没有更好的),来执行实际的SQL查询。最重要的是,它使用不少的反射来将查询消化到SQL中,并将SQL结果转换为对象列表。这个额外的层虽然灵活且功能强大,但它的执行速度比基于DataReader的硬编码“firehose”解决方案要慢。

NHibernate可能会让你获得更快性能的外观是“延迟加载”。假设您有一个人员列表,每个人都有一个PhoneNumbers列表。您正在从数据库中检索人员,只是为了获取他们的名字。基于DataReader的简单实现可能涉及为People调用存储过程,其中包括对其PhoneNumbers的连接,在这种情况下您不需要。相反,NHibernate将仅检索People,并将“代理”设置为对PhoneNumbers列表的引用;当需要评估列表时,代理对象将执行另一个调用。如果从不需要电话号码,则永远不会评估代理,从而省去了提取不需要的电话号码的麻烦。

答案 1 :(得分:1)

NHibernate并不是要让它变得更快,而且它会比仅使用像你这样的数据库灵长类动物更慢(它在“引擎盖下”使用它们)。

在我看来,NHibernate关于创建一个可重用的实体层,该实体层可以应用于不同的应用程序,或者至少在一个大中型应用程序的多个区域中重用。因此,将您的应用程序移动到NHibernate将浪费时间(听起来非常小)。

通过为数据库引擎使用特定的数据库驱动程序,可能会获得更好的性能。

答案 2 :(得分:1)

对于数据库中的数据量,它不会有任何区别。但通常使用NHibernate会降低应用程序性能,但会提高开发速度。但对于所有ORM来说,这通常是正确的。

答案 3 :(得分:0)

SOme提示:NHIbernate并不神奇。它位于ADO.NET之上。想要更快的驱动程序?得到一个。你为什么要使用像ODbc这样的慢速过时的技术?你的数据来源是什么?他们不支持像OLEDB这样的新标准吗?