应该在何时关闭Connect?

CatchWind 2005-03-16 10:24:40
用ADO开发的数据库程序,因为可能要频繁地操作数据库,需有一个连接.
本人不明白,是该让这个连接从程序运行开始,一直保持着连接状态,直到程序结束
还是应该在执行完一个操作后(比如添加记录,查询记录)立即关闭连接,而进行下
一次操作时再重新连接?

如果用第一种方法:因为连接一直保持,而数据库同时连接的用记过多,会影响其效率.如果
一个用户打开了程序,长时间未作任何操作,岂不浪费数据库资源?
第二方法:虽然能解决上面提到的问题,但是每执行一个操作都要重新连接数据库,执行速度
会有一定影响,再说频繁地连接数据库,也会增加客户机和服务器的负担

那么在两者之间,究竟应该如何取舍? 希望高手们参予讨论.
...全文
261 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodprogvb 2005-03-17
  • 打赏
  • 举报
回复
这就不是妳要考虑的问题了,只要连接字符串不变,就是同样的连接,OLE DB会自动处理的
--------------------
又学一手,谢谢!
wxylvmnn 2005-03-17
  • 打赏
  • 举报
回复
ADO使用Windows帳戶驗證時, 有時候連接要花費15s,一般情況下在ms級以內;
但是我使用SQL帳戶驗證時, 不會出現此情況.
不知道大家遇到過沒有, 又是什么原因引起的.
---------------------------------------------------------
這就跟你的網絡配置有關係了。是不是iis裏面的基本認證那個東西。
viena 2005-03-17
  • 打赏
  • 举报
回复
这就不是妳要考虑的问题了,只要连接字符串不变,就是同样的连接,OLE DB会自动处理的
flyingZFX 2005-03-17
  • 打赏
  • 举报
回复
Study ...

唉,差太远了。
viena 2005-03-17
  • 打赏
  • 举报
回复
SQL是进程内,当然快;
Window验证就麻烦了,牵涉活动目录,如果是工作组对等网还好办,只是跨进程而已;
如果在域里面必须到域控制器上进行验证,跨网络了,当然要花很多时间了
goodprogvb 2005-03-16
  • 打赏
  • 举报
回复
我觉得,在20秒钟内不需要与数据库进行数据交换的话,就要关闭连接,保持一个闲置的活动连接太浪费资源了,OLE DB会自动维护连接池的,短时间内再打开连接性能不受影响的~
------------------------------------------------------
能简单说一下连接池的原理吗?
我说一直连接好的主要原因就是怛心频繁连接会以时间为代价的。如果用连接池可以解决这个问题,当然是用完就关更好了。
viena 2005-03-16
  • 打赏
  • 举报
回复
我觉得,在20秒钟内不需要与数据库进行数据交换的话,就要关闭连接,保持一个闲置的活动连接太浪费资源了,OLE DB会自动维护连接池的,短时间内再打开连接性能不受影响的~
flyingZFX 2005-03-16
  • 打赏
  • 举报
回复
应该在不需要连接的时候关闭掉它。
daisy8675 2005-03-16
  • 打赏
  • 举报
回复
在合适的范围开最好,ado和ado.net不同,ado.net是开完就关,资料读进dataset中间,但是ado不行,个人觉得用完最关比较好
qyqmhh 2005-03-16
  • 打赏
  • 举报
回复
还有一个问题,就是我想整个程序就用一个连接,当然不是一直连着,而是用时就连,不用就断,但是每次次连接时都用上次断开的这个连接,我如何用代码来保证我新建的连接就是刚才那个关闭的但是还在连接池中的连接呢?
我担心的是虽然用完就关了,但还在连接池中,我又想用,故又新建一个连接,但是并不是刚才关闭后放入连接池的那个,这样就不好了。会导致连接池中的非活动连接越来越多。
谢谢指教,楼上几位老师使我学到很多东西。
期待再指教一下我这个问题。
拜托
CatchWind 2005-03-16
  • 打赏
  • 举报
回复
在同一個程序中,會用代碼控制始終使用同一個連接的.這种情況下呢?
goodprogvb 2005-03-16
  • 打赏
  • 举报
回复
我觉得用一个连接较好,因为这样省去了用之前连接,用后又要断开的代码,比较好管理。
否则如果用户打开连接太多时,对服务器压力很大。(因为有的操作者只知道打开窗口,而不知道把不用的窗口及时关了。)如果有多个连接,又有多个人用,你到企业管理器中看一下进程号,是很多的,能不影响效率吗?
个人之见。
wwqna 2005-03-16
  • 打赏
  • 举报
回复
让整个程序共用一个就好了,不用一个地方就开一个。
xayzmb 2005-03-16
  • 打赏
  • 举报
回复
我一般是用完立即就关
CatchWind 2005-03-16
  • 打赏
  • 举报
回复
謝謝各位大蝦參予討論。我以前也是用完即關,現在明白大家也都是這樣做的.

最近還發現一個問題:
ADO使用Windows帳戶驗證時, 有時候連接要花費15s,一般情況下在ms級以內;
但是我使用SQL帳戶驗證時, 不會出現此情況.
不知道大家遇到過沒有, 又是什么原因引起的.
viena 2005-03-16
  • 打赏
  • 举报
回复
讨论的主要是C/S模式中打开跨网络连接的问题,时间主要用在跨网络通讯上面,这个时间可以达到秒级;
如果是本机数据库,实际上打开连接是很快的,绝对是毫秒级的,比如B/S结构或C/S三层结构但中间层和数据层在同一台机器上的情况;

实际上,打开连接对计算机资源消耗并不是很大;
而保持一个活动连接也是要耗资源的

而客户端操作,一个过程的时间一般是秒级以上的,有是可以达到分钟级以上;其中绝大部分时间连接处于空闲状态,如果保持活动连接的话,会严重浪费资源;当客户端很少的时候(小的C/S系统),资源浪费可以忽略不计,因为资源够用了;但如果客户端很多的情况,每个客户端都一直保持一个闲置的活动连接是不可想象的。
xiaoxiaoP 2005-03-16
  • 打赏
  • 举报
回复
(网上采集)
连接缓冲池(connection pool)其实原理非常简单。当关闭一个连接,就用户(和ADO)而言,这个连接已经关闭。但实际上OLE DB并没有关闭这个连接,只是将其放入了非活动的连接缓冲池中。任何时候用户(或其他人)打开一个连接,OLE DB首先检测连接缓冲池中是否有相同连接细节的连接存在。如果有,将直接从缓冲池中取得此连接。如果没有,则为用户创建一个新的连接。为了避免浪费资源,经过一段缺省的时间段后,就从缓冲池中清除该连接。
打开一个连接可能是所进行的操作中最慢的操作之一,连接缓冲池使用户能与数据存储再次连接而无须重新创建连接。对于ODBC连接,连接缓冲池由ODBC Data Source Administrator控制。对于OLE DB,不能改变连接缓冲池(或叫会话缓冲池)。必须注意的是,连接缓冲池不是连接共享。一个连接只有在被客户关闭后才能再次使用。
内务处理
为了使连接缓冲池生效,必须确保内务处理(Housekepping)处于有序状态。这包括及时关闭Connection对象,这样它们才能回到缓冲池重新使用。你可能认为不断地打开、关闭连接对系统的开销很大,但必须衡量一下可扩展性——你的应用程序可能有许多人在使用,OLE DB又非常善于管理连接资源。
一般的原则是:尽可能晚地建立连接,同时又要尽可能早地关闭连接,这样保证连接打开的时间段最短。
hwcqboy 2005-03-16
  • 打赏
  • 举报
回复
我也想最好是用完就关
wxylvmnn 2005-03-16
  • 打赏
  • 举报
回复
用完就關閉。

最科學,課本上都是這麽強調的。

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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