NHibernate SQL Server连接池?

时间:2013-05-13 22:50:40

标签: nhibernate

我试图加快一些Web服务调用,并怀疑打开许多NHibernate连接是个问题。我知道打开一个新的SQL服务器连接是非常耗时和昂贵的。但我认为NHibernate会保留一个连接(因此只需要打开一次),即使我在很多地方打开了一个nhibernate会话。

所以这是这个问题的几个不同部分:

  • 如果我创建一个会话并处理它,然后再次创建它,是否需要同时加载第二次,或者sql server连接是否仍然在后台使用?像这样:
    using (var session = new SessionFactory.OpenSession()) {... };
    using (var session2 = new SessionFactory.OpenSession()) {.. };
  • 如果我在using语句中创建一个会话,然后在该语句中创建另一个会话(不处理它),它是否不需要在后台启动整个其他sql server连接?像这样:
    using (var session = new SessionFactory.OpenSession()) 
    {
        using (var session2 = new SessionFactory.OpenSession()) {.. };
    };
  • 最后,是否跨Web服务调用保留了sql server连接?即如果我在Web服务请求调用#1上打开一个会话,那么Web服务请求调用#2会更快,因为隐藏的连接位于后台的某个地方,它会被接收并使用吗?

我知道在大多数情况下最好只使用一个会话,但是编写了一个非常大的程序,其中有许多新会话都在打开,我正在试图弄清楚是否真的可以节省很多性能。 - 写这个或不。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果在会话中打开会话,NHibernate很可能无法正常工作。连接通常是池化的,一旦不使用它就会返回池中。如果池没有任何可用连接,则会创建新连接。我建议查看查询优化和缓存。连接不会加快速度。