2013-05-13 128 views
0

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

所以这里有几个不同的部分来这样一个问题:

  • 如果我创建一个会话并处理它,然后重新创建它,它需要同时围绕加载第二次,或者是sql服务器连接仍然在后台使用?像这样:
 
    using (var session = new SessionFactory.OpenSession()) {... }; 
    using (var session2 = new SessionFactory.OpenSession()) {.. }; 
  • 如果我创建一个使用语句中的会话,然后创建statment内另一个(不设置它)将它不需要旋转起来完全是另外一个SQL Server连接在后台?像这样:
 
    using (var session = new SessionFactory.OpenSession()) 
    { 
     using (var session2 = new SessionFactory.OpenSession()) {.. }; 
    }; 
  • 最后,是在SQL Server连接跨Web服务调用保存?即,如果我在Web服务请求调用#1上打开一个会话,Web服务请求调用#2是否会更快,因为隐藏的连接位于后台的某个位置,它将拾取并使用它?

我知道,在大多数情况下,使用一个会话可能是最好的,但是一个非常大的程序写了很多新的会话打开,我试图找出是否真的可以节省很多表现重写这个或没有。

谢谢!

回答

1

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