这几天在研究SQLCONNECTION的性能问题

heroman1979 2004-08-20 05:25:11
发现,如果你等待SQLCONNECTION的自动释放,你就错了
...全文
158 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
heroman1979 2004-08-23
  • 打赏
  • 举报
回复
SqlDataAdapter当然不用打开和关闭,SqlCommand当然要显式关闭
我的问题不是集中在这里,我发现,通常用COMMAND对象打开连接然后显示关闭连接,但是SQL SERVER好像并不会立即关闭此连接,需要很久才会关闭此连接呢
cuike519 2004-08-20
  • 打赏
  • 举报
回复
我做了一个试验。场景如下:
1、建立一个连接,填充一个DataSet。
2、两种方式释放资源
a.隐式的释放连接,此时显示的连接数是1,退出程序连接数是0。
b.显式的Close连接,此时显示连接数是2,退出以后连接数是0。
3、为了验证DataSet是一个完全和数据库没有关系的内存集合我强制将数据库的连接清除。我做了一下几步:
a.启动程序装载DataSet以后
b.清除数据库连接。
c.在DataSet里面查询数据是没有问题,连接不会增加。甚至可以删除数据库。
这里里面还有一个缓冲池的因素!不过我想至少可以得到下面结论:
DataSet是一种完全脱离数据库的对象,他和Connection之间没有依赖关系,Connection和数据库有依赖关系,如果在open一个连接以后显式的清除连接将会抛出system error异常!

在使用DataSet显式的关系连接是不应该的,通过上面的测试同一个连接装载完DataSet以后关闭,数据库的连接数是2。

所以我认为SqlDataAdapter不用显式关闭连接,SqlCommand要显式关闭连接!
Elvewyn 2004-08-20
  • 打赏
  • 举报
回复
将DataSet填充后马上关闭Connection不就可以了?
heroman1979 2004-08-20
  • 打赏
  • 举报
回复
我是做过了实验才敢说的,同样一个DATAGRID的绑定,我用DATASET的时候,发现,页面打开后很久,CONNECTION还是连接的,用DATAREADER后马上不一样了
heroman1979 2004-08-20
  • 打赏
  • 举报
回复
发现以下问题:
1.如果你用DATASET对象,那你要小心了,别以为DATASET只是比DATAREADER占用更多服务器内存,我通过SQLSERVER事件追踪和活动进程查看发现,如果是使用DATASET,那么其对应的CONNECTION对象会打开很久,我发现,好像只要浏览者在查看使用DATASET的该页面,则该页面中的DATASET对象引用的CONNECTION将一直打开,但是会处于SLEEP状态,也就是说,使用DATASET时,你的连接虽然人为关闭了,可是,SQL SERVER却仅将其置于睡眠状态,因为数据缓存在服务器上,并且和该连接间建立了依存关系.但是同时也发现,DATAREADER对象不是这样,当使用CONNECTION,执行一个COMMAND产生DATAREADER后,只要你在代码中立即关闭并销毁CONNECTION对象,那么,通过事件监视器和活动连接查看器,可以立即查看到这种释放行为

2,在CONNECTION对象的使用上,普遍还有一种争议,究竟该是多个CONNECTION对象好,还是一个CONNECTION对象好.
在SQLSERVER的帮助中,有一句话:SQL SERVER的最大并发连接数目是32,767 个用户连接。这里的并发是指同时,因此,假如真的是用一个连接的话,一个大型站点很快连接就耗用贻尽,更为重要的是,每一个连接将会耗用服务器的约400K内存(SQL帮助中关于并发的说明中原文)
那就意味意,假如并发500个,将会耗用200M内存,这个数字非同小可,因为如果你只用一个连接,那几乎意味着这个连接是一直占用的了
那么,按大多数人的说法"用完就关,多个连接呢",听起来也不错,可是,频繁的打开与关闭连接,会影响到应用的性能,可能查询用的时间也不及连接花费的时间呢
我想到的平衡办法是一个页面使用一个连接,就意味着页面跳转或关闭了,连接也就关闭了,不知道大家认为如何
heroman1979 2004-08-20
  • 打赏
  • 举报
回复
不是连接是不是该释放的问题
Eddie005 2004-08-20
  • 打赏
  • 举报
回复
严重同意 jiezhi(風依舊)
jiezhi 2004-08-20
  • 打赏
  • 举报
回复
连接本来就是要自己释放的。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧