代码之家  ›  专栏  ›  技术社区  ›  Hannoun Yassir

使用Direct ado.net与ORM的性能提升?

  •  1
  • Hannoun Yassir  · 技术社区  · 16 年前

    如果我将应用程序的数据访问部分从nhiberate替换为straight ado.net,我会获得性能提升吗?

    我知道NHibernate的核心是使用ado.net!

    1 回复  |  直到 16 年前
        1
  •  7
  •   Erik Öjebo    16 年前

    简短答复:

    这取决于您执行的操作类型。如果编写好SQL,您可能会获得性能改进,但在某些情况下,由于丢失了NHibernate缓存等,您可能会获得更差的性能。

    长答覆:

    正如您所提到的,NHibernate位于ADO.NET之上,提供了一个抽象层。这在许多方面使您的生活更轻松,但由于所有抽象层都有一定的性能成本。

    您可能会看到性能优势的主要情况是同时操作多个对象,例如更新多个实体或获取大量实体。这是因为NHibernate会话在跟踪哪些对象被修改等方面所做的工作。我的经验是,随着会话中实体数量的增加,NHibernate的性能会显著下降。

    NHibernate有很多提高性能的方法,如果您真的很了解它,您可以让它的性能非常接近ADO.NET。然而,如果你对它不太熟悉,你可以很容易地击中自己的脚,从性能上看(选择N+1问题等)

    在某些情况下,当从NHibernate切换到straight ADO.NET时,性能可能会变差。这是因为NHibernate抽象层引入了一些可以提高性能的特性,比如缓存。NHibernate还包括优化当前数据库管理系统生成的SQL的功能。例如,如果您使用的是SQL Server,则生成的SQL可能与使用Oracle时略有不同。