知识大全 .NET程序中对连接池的管理方法

Posted

篇首语:生活的理想,就是为了理想的生活。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 .NET程序中对连接池的管理方法相关的知识,希望对你有一定的参考价值。

.NET程序中对连接池的管理方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  对于访问量高的系统 每次创建一个连接都会消耗一定的资源 我们可以事先创建好一定数量的连接放入连接池中提供给用户使用 用户使用完后把连接返回连接池 这里我就来说说连接池的管理     首先 让我们来看看连接池的概念    连接池允许应用程序从连接池中获得一个连接并使用这个连接 而不需要为每一个连接请求重新建立一个连接 一旦一个新的连接被创建并且放置在连接池中 应用程序就可以重复使用这个连接而不必实施整个数据库连接创建过程    当应用程序请求一个连接时 连接池为该应用程序分配一个连接而不是重新建立一个连接 当应用程序使用完连接后 该连接被归还给连接池而不是直接释放      优点    使用连接池的最主要的优点是性能    创建一个新的数据库连接所耗费的时间主要取决于网络的速度以及应用程序和数据库服务器的(网络)距离 而且这个过程通常是一个很耗时的过程 而采用数据库连接池后 数据库连接请求可以直接通过连接池满足而不需要为该请求重新连接 认证到数据库服务器 这样就节省了时间      缺点    数据库连接池中可能存在着多个没有被使用的连接一直连接着数据库(这意味着资源的浪费)   ps 这必须要求开发人员在开发时估计这个系统最大提供的数量是多少      池的创建和分配  当连接打开时 将根据一种精确的匹配算法来创建连接池 该算法会使连接池与连接中的字符串相关联 每个连接池都与一个不同的连接字符串相关联 当新连接打开时 如果连接字符串不精确匹配现有池 则将创建一个新池     在以下示例中 将创建三个新的 SqlConnection 对象 但只需要使用两个连接池来管理这些对象 请注意 第一个和第二个连接字符串的差异在于为 Initial Catalog 分配的值     SqlConnection conn = new SqlConnection();  conn ConnectionString = Integrated Security=SSPI;Initial Catalog=northwind ;  conn Open();  // 连接池A创建了    SqlConnection conn = new SqlConnection();  conn ConnectionString = Integrated Security=SSPI;Initial Catalog=pubs ;  conn Open();  // 连接池B创建了 因为ConnectionString与A不匹配    SqlConnection conn = new SqlConnection();  conn ConnectionString = Integrated Security=SSPI;Initial Catalog=northwind ;  conn Open();  // 使用A的连接池 因为ConnectionString与A匹配    连接池一旦创建 直到活动进程终止时才会被毁坏 非活动或空池的维护只需要最少的系统开销      连接的添加  连接池是为每个唯一的连接字符串创建的 当创建一个池后 将创建多个连接对象并将其添加到该池中 以满足最小池大小的要求 连接将根据需要添加到池中 直至达到最大池大小     当请求 SqlConnection 对象时 如果存在可用的连接 则将从池中获取该对象 若要成为可用连接 该连接当前必须未被使用 具有匹配的事务上下文或者不与任何事务上下文相关联 并且具有与服务器的有效链接     如果已达到最大池大小且不存在可用的连接 则该请求将会排队 当连接被释放回池中时 连接池管理程序通过重新分配连接来满足这些请求 对 Connection 调用 Close 或 Dispose 时 连接被释放回池中     警告  建议使用完 Connection 后始终将其关闭 以便连接可以返回到池中 这可以使用 Connection 对象的 Close 或 Dispose 方法来实现 不是显式关闭的连接可能不会添加或返回到池中 例如 如果连接已超出范围但没有显式关闭 则仅当达到最大池大小而该连接仍然有效时 该连接才会返回到连接池中   注意  不要在类的 Finalize 方法中对 Connection DataReader 或任何其他托管对象调用 Close 或 Dispose 在终结器中 仅释放类直接拥有的非托管资源 如果类不拥有任何非托管资源 则不要在类定义中包含 Finalize 方法 有关更多信息 请参见垃圾回收编程      连接的移除  如果连接生存期已过期 或者连接池管理程序检测到与服务器的连接已断开 连接池管理程序将从池中移除该连接 请注意 只有在尝试与服务器进行通信后 才可以检测到这种情况 如果发现某连接不再连接到服务器 则会将其标记为无效 连接池管理程序会定期扫描连接池 查找已释放到池中并标记为无效的对象 找到后 这些连接将被永久移除     如果存在与已消失的服务器的连接 那么即使连接池管理程序未检测到已断开的连接并将其标记为无效 仍有可能将此连接从池中取出 当发生这种情况时 将生成异常 但是 为了将该连接释放回池中 仍必须将其关闭      字符串关键字   Connection Lifetime 当连接返回到池中时 将对它的创建时间和当前时间进行比较 如果时间间隔超过由 Connection Lifetime 指定的值(以秒为单位) 则会毁坏该连接 在聚集配置中可以使用它来强制在运行服务器和刚联机的服务器之间达到负载平衡   如果值为零 ( ) 则将使池连接具有最大的超时期限     Connection Reset true 确定在从池中移除数据库连接时是否将其重置 对于 Microsoft SQL Server 版本 如果设置为 false 将避免在获取连接时经历一个额外的往返过程 但必须注意的是连接状态(如数据库上下文)不会被重置   Enlist true 当为 true 时 如果存在事务上下文 池管理程序将自动在创建线程的当前事务上下文中登记连接   Max Pool Size 池中允许的最大连接数   Min Pool Size 池中维护的最小连接数   Pooling true 当为 true 时 将从相应的池中取出连接 或者在必要时创建连接并将其添加到相应的池中      实例代码   namespace HowTo Samples ADONET      using System;  using System Data SqlClient;    public class connectionpooling    public static void Main()    connectionpooling myconnectionpooling = new connectionpooling();  myconnectionpooling Run();      public void Run()    try    String connString;    // Specification in the connection string:  // Please note: Pooling is implicit you automatically get it unless you disable it   //       Therefore true is the default for the pooling keyword (pooling=true)   // Connection Reset:  False  // Connection Lifetime:   // Enlist:       true  // Min Pool Size:      // Max Pool Size:      connString = server=(local)\\\\NetSDK;Trusted_Connection=yes;database=northwind; +   connection reset=false; +   connection lifetime= ; +   min pool size= ; +   max pool size= ;    SqlConnection myConnection = new SqlConnection(connString);  SqlConnection myConnection = new SqlConnection(connString);  SqlConnection myConnection = new SqlConnection(connString);    // Open o connections   Console WriteLine ( 打开两个连接 );  myConnection Open();  myConnection Open();    // Now there are o connections in the pool that matches the connection string   // Return the both connections to the pool   Console WriteLine ( 将两个连接都返回到池中 );  myConnection Close();  myConnection Close();    // Get a connection out of the pool   Console WriteLine ( 从池中打开一个连接 );  myConnection Open();    // Get a second connection out of the pool   Console WriteLine ( 从池中打开第二个连接 );  myConnection Open();    // Open a third connection   Console WriteLine ( 打开第三个连接 );  myConnection Open();    // Return the all connections to the pool   Console WriteLine ( 将所有三个连接都返回到池中 );  myConnection Close();  myConnection Close();  myConnection Close();    catch (Exception e)    // Display the error   Console WriteLine(e ToString());           cha138/Article/program/Java/hx/201311/25961

相关参考

知识大全 ado.net数据库连接

   紧急求助程序连接sqlserver数据库出现问题   服务器配置   windowsxp &n

知识大全 用ASP.NET结合XML制作广告管理程序

用ASP.NET结合XML制作广告管理程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本文介绍一

知识大全 ASP.NET项目开发指南:企业信息管理系统数据库连接编写

ASP.NET项目开发指南:企业信息管理系统数据库连接编写  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 .NET应用程序的授权模型使系统更易管理

.NET应用程序的授权模型使系统更易管理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  正确设计

知识大全 如何减少数据库管理

  连接应用程序  每个应用程序都需要识别其所要连接的以便从中检索数据的数据库服务器通过使用连接字符串可以实现应用程序和数据库服务器的连接典型的连接字符串如下     &

知识大全 监控Proxool连接池的活动连接变化情况

监控Proxool连接池的活动连接变化情况  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  研究了

知识大全 c#(或vb.net)程序改进,可以提高性能

  使用值类型的ToString方法  在连接字符串时经常使用+号直接将数字添加到字符串中这种方法虽然简单也可以得到正确结果但是由于涉及到不同的数据类型数字需要通过装箱操作转化为引用类型才可以添加到字

知识大全 spring中连接池的配置

  在默认通过myeclipse生成的配置里spring使用的是apache的dbcp连接池  <beanid=dataSource  class=monsdbcpBasicDataSource

知识大全 tomcat连接池的三个重要参数[2]

  使用如下代码进行实验(每一次不关闭连接)try   Connectioncon=getJdbcDAO()getDataSource()getConnection();

知识大全 使用连接池的意义

  我从来都这样说:不是所有的应用都要采用连结池一般的轻载用了连结池反而会降低效率要用什么方式连结完全看你的系统瓶颈>  一个普通的连结过程中因为Connection一般要用到本地方法这些初始化是非常