Han*_*sir 1 nhibernate performance ado.net
如果我将应用程序的数据访问部分从nhiberate替换为直接的ado.net,我会获得任何性能提升吗?
我知道NHibernate的核心是使用ado.net!
简短回答:
这取决于您执行的操作类型.如果编写好的SQL,可能会获得性能提升,但在某些情况下,由于丢失了NHibernate缓存等,性能可能会提高.
答案很长:
正如您所提到的,NHibernate位于ADO.NET之上,并提供了一个抽象层.这使您的生活在许多方面变得更容易,但是作为所有抽象层,它具有一定的性能成本.
您可能会看到性能优势的主要情况是您同时操作多个对象,例如更新许多实体或获取大量实体.这是因为NHibernate会话所做的工作是跟踪哪些对象被修改等等.我的经验是,随着会话中实体数量的增加,NHibernate的性能显着下降.
NHibernate有很多方法可以提高性能,如果你真的很了解它,你可以让它与ADO.NET非常接近.但是,如果你不熟悉它,那么你可以轻松地在脚下射击,性能方面.(选择N + 1问题等)
在某些情况下,当您将表单NHibernate切换到直接ADO.NET时,您实际上可能会遇到更糟糕的性能.这是因为NHibernate抽象层引入了一些可以提高性能的功能,例如缓存.NHibernate还包括用于优化当前数据库管理系统生成的SQL的功能.例如,如果您使用的是SQL Server,则可能会生成与使用Oracle时略有不同的SQL.
值得一提的是,它不一定是一种全有或全无的情况.你可以使用NHibernate来获得90%的数据库访问权限,然后使用直接SQL进行复杂查询,批量插入/更新等10%.