怎么才算真正意义上的“关闭数据库连接”,结合SQL Server 2005!
一直在用SQL Server 2005做为数据库,里面有个“活动监视器”可以查看有哪些进程连接了数据库。
用ASP.Net写了数据库相关操作的程序,每次操作结束都主动关闭数据库。但是却发现“活动监视器”里面始终存在一个刚刚所做的操作的进程,其实这个操作我已经关闭了,这个进程要要大约5分钟时间才消失。
如果我不做关闭数据库连接的操作,则操作进程会慢慢增加,哪怕是同一个操作,这就说明我的关闭是有效的,但是为什么在关闭之后始终会有一个进程暂时存在呢,而不是马上消失?
[解决办法]
把 SqlConnection.Close() 并不关闭数据库连接,而是把连接放回连接池。在逻辑情况下,针对需要连接对象的代码而要,可以把这个说成关闭了连接(连接不能在被用来创建SqlCommand、SqlDataAdapter等了),但是并不意味着等价于关闭了与数据库的物理连接。
许多所谓数据库“优化”说关闭连接耗时间,那种关闭连接显然是个低级概念,不是这里所说的关闭连接。
[解决办法]
sql server 和 oracle 提供程序的连接池自动启动.可以在连接字符串中把pooling设置为false来禁用它.
SqlConnection.ClearPool()
或者
SqlConnection.ClearAllPool()
清除连接池,但不赞成关闭连接池