(原創) 我該每次存取SQL Server後,就關閉Connection?還是等關閉網頁後再一次關閉Connection? (初級) (.NET) (ADO.NET) (SQL Server)
2006-11-12 00:09
375 查看
<原文我曾發表在聖殿祭司的留言板,在此再做些修訂>
在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程式所能同時上線人數。
在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程式所能同時上線人數。
相关文章推荐
- (原創) 是否該使用.NET 2.0的DataSource? (初級) (.NET) (ADO.NET)
- (原創) DataSet是存在Server端的内存?还是Client端的内存? (初級) (.NET) (ADO.NET)
- ADO.Net Connection Pool Anatomy
- SQL Server 2000+ADO.NET实现并发控制.
- 深入了解 SQL Server 2000 与 ADO.NET 中的事务隔离及数据锁定
- 翻译(未完成):ADO.NET线程池概览(ADO.NET Connection Pooling at a Glance)
- (原創) 关于用利用C#控制RS232硬件方面的书 (初級) (.NET)
- ADO.NET 使用中 BUG 汇报之一[使用OleDb操作SQL SERVER]
- 使用ADO.NET的Connection对象 .
- 你必须知道的ADO.NET(四) 品味Connection对象
- 转:事务的使用(ADO.NET和SQL SERVER)
- SQL Server 2008 中的 FILESTREAM 数据 (ADO.NET)来自MSDN
- 事务的使用(ADO.NET和SQL SERVER)
- SQL Server 连接池 (ADO.NET)
- Visual C# 2008+SQL Server 2005 数据库与网络开发-- 7.3 使用ADO .NET处理数据
- ssis 的For each container组件中,若有 Execute SQL TASK Editor且其含参, 后者的Connection Type应设为 ADO.NET
- ADO.NET:从 SQL Server 检索数据
- SQL Server 连接池 (ADO.NET)
- ADO.NET与SQL Server连接字符串
- 趣味理解ADO.NET对象模型 系列二——进水笼头--建立Connection