连接缓冲池使用原则

连接缓冲池使用原则

  1 连接池原理

  连接池允许我们通过一个缓冲池重用现有的连接对象,避免每次使用连接对象时都要新建一个对象。采用连接池之后,只要少量的连接对象就可以满足大量客户端的需要。

  每一个连接池都与一个独立的连接字符串及其事务上下文关联。每次打开一个新的连接,数据提供者会尝试将指定的连接字符串与连接池的字符串进行匹配。如果匹配失败,数据提供者创建一个新的连接并将它加入连接池。连接池被创建之后,除非进程结束,否则不会被拆除。有人认为这种处理方式会影响性能,其实不然,维护一个不活动的或者空的连接池不需要多少开销。

  连接池创建之后,系统会创建一些连接对象并将它们加入连接池,直至达到额定的最小连接对象数量。以后,系统会根据需要新建和加入连接对象,一直到达最大连接对象数量限额为止。如果程序请求一个连接对象时没有空闲的连接对象可用,且连接池里面的对象数量已达到上限,则请求被放入队列,一旦有连接被释放回缓冲池就立即取出使用。

  避免用编程的方式构造连接字符串。如果通过合并多个输入数据的方式构造出连接字符串,很容易给注入式攻击以可乘之机。如果必须用到用户输入的数据,务必进行严格的验证。

  2关闭连接

  关闭一个连接时,连接对象被返回给连接池以便重用,但这时实际的数据库连接并未被拆除。如果禁用了连接池,则实际的数据库连接也被关闭。这里必须强调的一点时,连接对象使用完毕后应当显式关闭并将它返回给连接池,不要依靠垃圾收集器来释放连接。实际上,当连接对象的引用超出有效范围时,连接不一定被关闭——垃圾收集器的功能是拆除代表物理连接的.NET封装对象,但这并不意味着底层的连接也被关闭了。

  

  调用Close或Dispose方法可以将连接释放回连接池。只有当生存期结束或出现严重错误时,连接对象才会被从连接池删除。

  3 连接池与安全

  如果一个应用程序的所有数据访问操作都使用同样的连接字符串,连接池的优势将发挥到极限。但是,这只是一种理想化了的状况,很可能与应用程序的其他要求存在冲突。例如,如果只使用一个连接字符串,要在数据库这一层次上执行安全控制就很困难了。

  另一方面,如果让每一个用户分别使用自己的连接字符串(即为每一个用户分别设定数据库帐户),势必出现大量小型的连接池,许多连接根本不会被重用。依照惯例,这类问题的最佳解决方案是寻找两个极端之间的一个适当折衷点。我们可以设置一组具有代表性的公用帐户,同时修改存储过程,使之接受一个表示用户标识的参数,存储过程根据传入的用户标识执行不同的操作。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值