ADONET数据连接.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ADO NET数据连接 ? 作者:貔貅发表于2010-07-27 15:02原文链接阅读:2评论:0 【IT168技术文档】21世纪什么最贵?数据库连接。对于以数据库做数据存储基石的应用系统来说,数据库连接是整个系统中最珍贵的资源之一。数据库连接池是为了更有效地利用数据库连接的最重要措施。它对于一个大型的应用系统的性能至关重要,特别是Web应用。ADO.NET Data Provider(以下简称Data Provider)会帮我们管理连接池,所以有人说使用连接池就像游儿童池一样轻松。但并不是说有了Data Provider程序员就万事无忧的,不正确地使用连接池可能导致你的应用在池里淹死。笔者希望通过本文能让读者彻底明白连接池的重要性以及能根据实际情况正确配置连接池的参数,明白实际应用中出现的连接泄漏、死连接等异常情况和应对方法,让应用轻松畅游连接池。本文主要介绍ADO.NET 1.1的连接池。 1、什么是连接池 连接池是Data Provider提供的一个机制,使得应用程序使用的连接保存在连接池里而避免每次都要完成建立/关闭连接的完整过程。要理解连接池,先要理解程序里SqlConnection.Open()、SqlConnection.Close()和打开/关闭一个物理连接的关系。 Data Provider在收到连接请求时建立连接的完整过程是:先连接池里建立新的连接(即逻辑连接),然后建立该逻辑连接对应的物理连接。建立逻辑连接一定伴随着建立物理连接。Data Provider关闭一个连接的完整过程是先关闭逻辑连接对应的物理连接然后销毁逻辑连接。销毁逻辑连接一定伴随着关闭物理连接。SqlConnection.Open()是向Data Provider请求一个连接,Data Provider不一定需要完成建立连接的完整过程,可能只需要从连接池里取出一个可用的连接就可以;SqlConnection.Close()是请求关闭一个连接,Data Provider不一定需要完成关闭连接的完整过程,可能只需要把连接释放回连接池就可以。 下面以一个例子来说明。本文例子都使用Console Application。我们使用操作系统的性能监视器来比较使用连接池与否,数据库的物理连接数量的不同。因为性能监视器至少每一秒采集一次数据,为方便观察效果,代码中Open和Close连接后都Sleep一秒。 SqlConnection con=new SqlConnection(server=.; database=northwind;pooling=false;trusted_connection=true); for(inti=0;i 10;i++) { try { con.Open(); System.Threading.Thread.Sleep(1000); } catch(Exception e){Console.WriteLine(e.Message);} finally { con.Close(); System.Threading.Thread.Sleep(1000); } } 首先,不使用连接池做测试。以上程序中pooing=false表示不使用连接池,程序使用同一个连接串OpenClose了10次连接,使用性能计数器观察SQL Server的物理连接数量。从下面的锯齿图可以看出每执行一次con.Open(),SQLServer的物理连接数量都增加一,而每执行一次con.Close(),SQLServer的物理连接数量都减少一。由于不使用连接池,每次Close连接的时候Data Provider需要把逻辑连接和物理连接都销毁了,每次Open连接的时候Data Provider需要建立逻辑连接和物理连接,锯齿图因此而成。 图1 下面启用连接池再测试一次。把连接串的pooling参数改为true,另外在for循环后加上Console.Read()。 从下图可以看出,从第一次Open到第执行完Console.Read()这段时间内,SQL Server的物理连接数量一直保持为1,直到关闭console应用程序的进程后SQL Server的物理连接数量才变为0。由于使用了连接池,每次Close连接的时候Data Provider只需把逻辑连接释放回连接池,对应的物理连接则保持打开的状态。每次Open连接的时候,Data Provider只需从连接池取出一个逻辑连接,这样就可以使用其对应物理连接而不需建立新的物理连接,直线图因此而成。 图2 在ADO.NET 1.1下使用性能计数器观察连接池有关计数器需要注意两个bug。 (1)当应用程序进程关闭后,计数器SqlClient:Current#pooled connections和SqlClient

文档评论(0)

shujukd + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档