0

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

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

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

我知道在大多数情况下最好只使用一个会话,但是编写了一个非常大的程序,并且打开了许多新会话,我试图弄清楚重新编写它是否真的会节省很多性能或不。

谢谢!

4

1 回答 1

1

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

于 2013-05-13T22:58:16.203 回答