2010-06-12 96 views

回答

3

這其實並不重要。當您使用ADO.NET(其中包括Linq to SQL,NHibernate和任何其他ORM)時,該庫使用連接池。您可以「關閉」並「重新打開」邏輯連接十幾次,但同一個連接將始終保持打開狀態。所以不要過多關心連接是否打開或關閉。

相反,您應該嘗試限制每頁必須運行的查詢數,因爲每次往返都會產生大量開銷。如果您在每個頁面上顯示相同的數據,請緩存結果,並設置緩存依賴性或到期日期,如果它不經常更改。還可以嘗試通過使用適當的連接和/或急切的加載來重用查詢數據(如果您使用的是延遲加載的ORM)。

即使數據在每次頁面加載時都會完全不同,您將通過使用返回多個結果集的單個存儲過程獲得更好的性能,而不是單獨運行每個查詢。

底線:忘掉連接策略並開始擔心查詢策略。每頁超過3-5個查詢,您可能會遇到嚴重的規模問題。

0

如果您確信交易將很快完成,那麼請使用單個連接。

務必檢查所有返回結果並在可能的情況下將所有內容都包含在異常處理中。

+0

@should我只是存儲一個緩存的連接對象 – leora 2010-06-12 14:07:33

0

爲避免不必要的開銷,最好使用單個連接。但一定要在「try」塊中運行查詢,並在「finally」塊中關閉連接,以確保不會掛起連接。

try-finally

+2

或使用'using'語句 – 2010-06-12 13:53:08

0

的UnitOfWork ??這是一個很好的策略。 nhibernate和許多其他人使用這種模式。

給它一個滿足您的要求具體細節一個谷歌..

吉姆

1

如果您在ADO.NET的常規頁面上運行多個查詢,那麼它們將按順序運行,並且連接池將意味着它無關緊要。最佳做法是按需打開連接並立即關閉連接 - 即使是在同一頁面中進行多個查詢。連接池使得這個效率很高。

當您使用多個查詢時,通過同時打開多個連接並使用異步ADO來確保所有請求在多個線程中同時運行,可以顯着提高性能。在這種情況下,您需要每個查詢的連接。但整體連接時間會縮短。

在單一連接上也可能使用MARS,但我並不是那種支持者,並且在功能上受到很多限制。

相關問題