(原創) 我該每次存取SQL Server後,就關閉Connection?還是等關閉網頁後再一次關閉Connection? (初級) (.NET) (ADO.NET) (SQL Server)
<原文我曾發表在聖殿祭司的留言板,在此再做些修訂>
在Client/Server時代,由於上線人數較少,很多人都是程式一啟動就開啟Connection,等到程式結束再關閉Connection。但在Web時代,書上的範例程式都教我們要存取SQL Server才開啟Connection,一旦存取完畢就立刻關閉Connection,很多人懷疑這種寫法一直反覆的Open()和Close(),會不會造成程式效率低落呢?
在Web時代,由於上線人數無法預期,所以讓SQL Server同時能撐更多的人就變成很重要的課題了。因為Connection對於SQL Server是極重要的資源,在SQL Server 2000時代,每個Connection佔SQL Server 64K,若你不關,記憶體就這樣佔著,一台SQL Server能承受的Connection數有限,若你不關,SQL Server能同時存取的人數會越少。
至於效率問題,一般人的顧慮的確是有道理,每開一個Connection,在SQL Server需要約1秒鐘的時間,可以說非常的慢,但ADO.NET有個Connection Pool機制,也就是說,當你將Connection Close時,並不是真的去關閉Connection,而是將Connection丟到Connection Pool裡,等下一個指令需要Connection時,就從Connection Pool給你Connection,若在Connection Pool中太久沒有使用Connection,ADO.NET才會自己真的去關閉這個Connection。也因為有 Connection Pool的機制,所以效能影響不大,卻大大增加了整個Web程式所能同時上線人數。