我不確定你使用你的連接的上下文是什麼,但我可以分享似乎爲我工作的內容。
我使用SQL服務器作爲我的後端,並結合使用緩存來獲得更好的性能。 我的做法是保持連接打開,只有當我真的需要它並且不要連接池以便它們立即清理時,我可以在SQL Activity監視器中看到究竟什麼是活動的,哪些不是。每個連接都會佔用內存,因此在不需要時將其保持沉悶的咆哮是很好的。
在我回答連接開放和關閉問題之前,讓我說緩存是非常重要的。從緩存中獲取對象將爲您節省大量時間。在我開發的一些asp.net應用程序中,當我在開發中進行緩存時,我發現我幾乎無法測量延遲,而使用數據庫調用可能需要15ms到45ms的任何時間來完成調用,這甚至不考慮其他延遲因素或負荷。我使用的另一種方法是用於我的數據的一種很好的對象結構,這樣我只在數據庫更新時才進行更新。我在我的對象上實現了一些方法o確保我儘可能少做IO。
話雖這麼說,我們都知道,我們需要訪問並在某些時候寫信給我們的數據庫,所以我遵循兩個原則:
保持關閉,以節省能源的門窗。一個地方的開放連接意味着它在另一個地方不可用(或者內存和其他資源更有限)。我們已經關閉了,因爲它爲我們帶來了更好的表現。
我可以在連接打開的情況下儘可能批量或一次性完成。這有點複雜,所以讓我解釋一下。
- 我使用的一種方法是將我的連接對象向下傳遞給管道,以便所有對象都可以使用一個連接對象。這會導致一個連接打開和關閉,而不是10個或更多,具體取決於您的應用程序。一個很好的例子就是我們的採購模式之一,它利用SQL服務器的強大功能來收集統計數據並散列出複雜的排序模式。當您進行200K + DB查找或任何應用程序的查找時,繼續打開和關閉連接是沒有意義的。另一部分是,當我使用對象時,我嘗試捆綁更新以減少保持連接打開的時間。因此,對插入調用做一個scope_identity讓我來處理我的插入和查找唯一標識以在緩存之前添加到對象中。 回到剛開始開發asp應用程序的那一天,我實際上在頁面開始加載後立即打開連接,然後關閉它。我不建議再這樣做。現在每天對這些抽象和層次都有很大的好處,我會建議任何新手程序員仔細關注。
我的兩分錢:
緩存您的數據!緩存你的數據!緩存你的數據!在無法緩存並緩存數據時儘可能少地訪問數據庫!