我正在使用一种具有简单数据模型的应用程序(4个表,其中包括两个小表,大约有10行,而两个大表,具有数百行)。
我正在使用C#,当前将OdbcDriver用于我的数据访问层。
我想知道此驱动程序或NHibernate在性能方面是否有差异?
该应用程序可以运行,但是我想知道是否安装NHibernate而不是经典的OdbcDriver可以使其更快?如果是这样,区别真的值得安装NHibernate吗? (根据我从未使用过这种技术的事实)
谢谢!
最佳答案
简短的答案:不,NHibernate实际上在大多数情况下会降低您的性能。
更长的答案:NHibernate使用基本的ADO.NET驱动程序(包括OdbcConnection(如果没有更好的方法))执行实际的SQL查询。最重要的是,它不费吹灰之力就将查询摘要转换为SQL,并将SQL结果转换为对象列表。与基于DataReader的硬编码“ firehose”解决方案相比,这一额外的层(尽管如此灵活而强大)将执行得更慢。
NHibernate可以让您获得更快性能的地方在于“延迟加载”。假设您有一个人员列表,每个人员都有一个电话号码列表。您正在从数据库中检索人员,只是为了获得其名称。基于朴素的DataReader的实现可能涉及为People调用存储过程,该存储过程包括对他们的PhoneNumber的联接,在这种情况下,您不需要。相反,NHibernate将仅检索People,并在对PhoneNumbers列表的引用中设置“代理”。当需要评估列表时,代理对象将执行另一个调用。如果永远不需要电话号码,则永远不会评估代理,从而省去了提取不需要的电话号码的麻烦。
关于c# - NHibernate是否比经典的ODBC驱动程序快?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5434005/