【问题标题】:NHibernate Connection PoolingNHibernate 连接池
【发布时间】:2011-10-04 22:41:12
【问题描述】:

我正在考虑将 Fluent NHibernate 用于带有 SQL Server 2008 的新应用程序,但我无法理解我看到的连接处理行为。

我正在使用 sp_who2 监控连接,这是我看到的:

  1. 创建 SessionFactory 时,会打开一个连接。这种连接 似乎在应用程序被杀死之前一直保持打开状态。

  2. 打开新会话时未打开任何连接。 (没关系,我知道 NHibernate 会等到最后一刻才创建数据库连接)。

  3. 即使我通过 NHibernate 运行查询,也没有打开新连接。我必须假设它使用的是在创建 SessionFactory 时创建的连接,该连接仍然处于打开状态。我在查询之后(会话关闭之前)设置了一个断点,并且 sp_who 中没有出现新的会话。

通过单个连接运行整个应用程序是不可接受的(显然)。 我怎样才能确保每个 ISession 都有自己的连接?我确定我在这里缺少一些明显的东西......

提前致谢。

【问题讨论】:

    标签: nhibernate fluent-nhibernate


    【解决方案1】:

    您看到的行为与 NHibernate 无关 - 连接池是 SQL Server 中的默认行为。
    即使乍一看可能听起来很尴尬,但这实际上是一件好事,因为创建新连接并维护它们很昂贵。
    (欲了解更多信息,请参阅Wikipedia article about connection pooling

    因此无需尝试让 NH 为每个会话打开一个新连接,因为重用现有连接实际上可以提高 SQL Server 性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-18
      • 2013-08-20
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 2012-01-15
      相关资源
      最近更新 更多