谈谈ADO.NET数据库连接池创建和分配

开发 后端
这里就ADO.NET数据库连接池的创建和分配、ADO.NET数据库连接的添加都有详细的介绍,希望对大家有帮助。

连接数据库是我们编程不可缺少的一部分,要保存数据就得连接数据库,这里我们就简单的看看ADO.NET数据库连接。建立池连接可以显著提高应用程序的性能和可缩放性。SQL Server .NET Framework 数据提供程序自动为 ADO.NET 客户端应用程序提供连接池。

ADO.NET数据库连接池的创建和分配

当连接打开时,将根据一种精确的匹配算法来创建连接池,该算法会使连接池与连接中的字符串相关联。每个连接池都与一个不同的连接字符串相关联。当新连接打开时,如果连接字符串不精确匹配现有池,则将创建一个新池。在以下示例中,将创建三个新的 SqlConnection 对象,但只需要使用两个连接池来管理这些对象。请注意,***个和第二个连接字符串的差异在于为 Initial Catalog 分配的值。

  1. SqlConnection conn = new SqlConnection();  
  2. conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";  
  3. conn.Open();    
  4. // Pool A is created.  
  5.  
  6. SqlConnection conn = new SqlConnection();  
  7. conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=pubs";  
  8. conn.Open();    
  9. // Pool B is created because the connection strings differ.  
  10.  
  11. SqlConnection conn = new SqlConnection();  
  12. conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";  
  13. conn.Open();    
  14. // The connection string matches pool A.  

连接池一旦创建,直到活动进程终止时才会被毁坏。非活动或空池的维护只需要最少的系统开销。

ADO.NET数据库连接的添加

连接池是为每个唯一的连接字符串创建的。当创建一个池后,将创建多个连接对象并将其添加到该池中,以满足最小池大小的要求。连接将根据需要添加到池中,直至达到***池大小。当请求 SqlConnection 对象时,如果存在可用的连接,则将从池中获取该对象。若要成为可用连接,该连接当前必须未被使用,具有匹配的事务上下文或者不与任何事务上下文相关联,并且具有与服务器的有效链接。

如果已达到***池大小且不存在可用的连接,则该请求将会排队。当连接被释放回池中时,连接池管理程序通过重新分配连接来满足这些请求。对 Connection 调用 Close 或 Dispose 时,连接被释放回池中。

#T#警告   建议使用完 Connection 后始终将其关闭,以便连接可以返回到池中。这可以使用 Connection 对象的 Close 或 Dispose 方法来实现。不是显式关闭的连接可能不会添加或返回到池中。例如,如果连接已超出范围但没有显式关闭,则仅当达到***池大小而该连接仍然有效时,该连接才会返回到连接池中。注意   不要在类的 Finalize 方法中对 Connection、DataReader 或任何其他托管对象调用 Close 或 Dispose。在终结器中,仅释放类直接拥有的非托管资源。如果类不拥有任何非托管资源,则不要在类定义中包含 Finalize 方法。有关更多信息,请参见垃圾回收编程。

责任编辑:田树 来源: 博客
相关推荐

2009-06-26 14:41:48

ADO.NET

2009-12-23 09:01:15

ADO.NET连接池

2009-11-13 13:11:37

ADO.NET连接池

2009-11-03 16:51:04

ADO.NET连接池观

2009-12-28 10:09:10

ADO.NET连接

2009-12-22 13:34:48

ADO.Net Tea

2009-12-24 15:11:47

ADO.NET数据库连

2010-01-05 10:11:23

ADO.NET连接池

2009-11-03 15:58:22

2009-11-11 14:04:14

ADO.NET连接池

2009-12-23 14:53:28

ADO.NET连接池

2009-11-12 09:25:21

ADO.NET连接池

2009-12-30 16:22:58

ADO.NET连接池

2009-12-23 09:14:52

ADO.NET连接池

2009-07-20 14:03:43

Ado.net连接池

2011-05-20 13:11:22

ADO.NET

2009-12-22 09:59:06

ADO.NET数据库

2009-12-31 10:38:10

ADO.NET连接数据

2009-11-12 11:23:35

ADO.NET SQL

2010-02-25 09:06:40

ADO.NET连接池
点赞
收藏

51CTO技术栈公众号