2009-08-26 108 views
3

我已經完成了一個使用ASP.NET MVC,NHibernate和MySQL的網站。 在我的項目,我有一些倉庫類,每一個使用代碼這樣的方法:如何關閉NHibernate連接?

using(ISession session = NHibernateHelper.OpenSession()) { 
    using(ITransaction transaction = session.BeginTransaction()) { 
     session.Save(cidade); 
     transaction.Commit(); 
    } 
} 

我來自傳統的ASP,所以我烏蘇雷如果與MySQL連接實際上被關閉。事實上,我很喜歡是否有像Classic ASP這樣的連接。

我應該做些什麼來顯式關閉連接/會話還是「autocloseable」?

如果我的服務器上有很多打開的連接,有一種方法可以做到這一點嗎?

非常感謝。

回答

5

會話以非常有效的方式進行連接管理,因此只要您不忘記處理會話(就像您一樣),您不必手動執行任何操作。連接在會話的整個生命週期內都沒有打開,但僅在需要時纔打開。與連接池中的連接數量相比,不會有更多的連接到數據庫的連接,默認情況下爲100。幾乎在每種情況下,100個連接都不會很多,因此在打開大量連接時不需要做任何事情。在一個非常繁忙的網站上,你甚至不會使用所有的100個連接,因爲webrequests的線程池的大小,它會像20-40個打開的連接。