日期:2014-05-20  浏览次数:20572 次

关于ADO.NET 连接池的问题
C/S 结构
Client 端 ? Webservice ? DBServer

Client 会调用Webservice, 由webservice负责数据库操作
webservice 部署在一台单独的服务器上, 连接字符串只有一个,配置在config文件中

1. 如果有1台Client, 那么, 在对数据库进行操作的时候, 是否会出现多个connection同时存在的情况?还是说,始终用这一个connection?


2. 如果 1中只有一个connection, 如果有100台Client, 是否都公用这一个connection? 如果不共用connection, 那是否会新建100个链接呢?


如果出现下面的情况,

A 当第一个请求RequestA到达webservice端后,一个连接Connection1打开了, 执行完操作后, 关闭连接Connection1,释放。此时,Connnection1 应该被放入池中。
当第二个请求RequestB到达后, 是否是从池中取得的Connection1呢?

B 如果第一个请求到达后,Connection1打开,在执行过程中, 第二个请求RequestB又进来了,是会重新创建一个新的Connection?还是说,会公用Connection1? 还有其他情况么?



------解决方案--------------------
.NET的数据库连接池,没有用过!
但是c++的数据库连接池,我自己编写过。
大概的理论是:
1)按照传入的参数起N个连接来连接数据库(参数中有最小连接数N,最大连接数M)。

2)建立一个空闲队列(初始化的N个连接放到空闲队列),一个使用队列来管理,使用的时候重空闲队列抓取一个连接,丢到使用队列,

如果空闲队列没有可用连接,并且连接数小于允许的最大连接数(<M)则创建一个新的连接,否则等待。
.NET Framework也是类似的把!供lz参考!
------解决方案--------------------
释放后会放入池中,但后面的连接未必用前面释放的,也可能是新建的。这个应该是其内部机制控制的,具体的就需要看你的数据库的连接池的资料了