这两种效率哪一种更高?关于数据库连接和关闭
1、每次打开数据库后关闭数据库,这时,如果一个页面有多个过程需要操作数据库,不是要打开多次和关闭多次?
2、一次打开,最后关闭。但是比如说按钮事件等等,是不是每个有可能操作完的地方都要+加关闭和数据库语句?
哪一次效率更高些呢?谢谢
[解决办法]
在ADO.Net中﹐相同的連接多次開啟和關閑是沒有多大影響的﹐不會影響速度。(好象叫連接池功能吧)
[解决办法]
个人认为
LZ应该把数据库的连接开启、关闭对应单个操作 而不是单个页面的所有操作
为了尽量减少不同操作的耦合性
最好为每个操作开启连接
这样的好处就是 你不用老是去分析 执行某个操作前是否需要开启连接 是不是前面有操作已经开启了连接
说得有点口水话 见谅
[解决办法]
同意楼上的
[解决办法]
``一般一个页面如果要打开几次数据库连接,做不同的操作..我一般就让他一直开着..等到全部用完在关闭..不知道这样好不好..
[解决办法]
打开和关闭数据库是最占资源的
[解决办法]
长时间保持数据库的连接占用的资源更大,影响性能
个人觉得对数据库的连接应要用的时候打开,用完就关闭
[解决办法]
应该在每次使用前打开,使用完关闭。这样不会出现一页代码用完,其中有忘记关闭的情况出现,NET中的回收是很慢的,有没有关闭的连接是很影响效率的,相反,同一个连接,多次打开关闭并不会太大影响效率
[解决办法]
什么叫相同的连接呢?
我把数据库连接部份单独写了一个类文件
每次使用的时候是先创建这个类,比如
clsDatabase db = new clsDatabase();
cmd.Connection=db.getConn();
用完后采用db.CloseDB();
总觉得每次需要连接数据库的时候都要创建一个类,然用产生一个链接。。。感觉好像很费资源似的
为什么不把这个class定义为静态的呢?
其实我对class定义的时候什么时候该定义成静态,什么时候定义成常规类很是迷惑,朋友们解答一下。
[解决办法]
不可定义为静态,
如果定义为静态后,只会有一个SqlConnection实例了
静态成员属于对象而不是实例
于实例无关的可以定义为静态的
[解决办法]
try
{
using(SqlConnection conn = new SqlConnnection(source))
{
conn.Open();
// Do something
conn.Close(); // this is not imperative, "using " insures against the rish of forgetting to close conn
}
}
catch(Exception e)
{
}
[解决办法]
打开连接-> SQL操作-> 关闭连接
这是Web程序最通常的作法.
还有就是最好是分层,在按钮事件里应该是去调用逻辑层的方法来进行数据库操作.
如:
void BtnSave(object sender,EventArge e)
{
if(ValidateSave())
{
UserEntity user = New UserEntity();
user.Name = TxtUser.Text;
user.Sex = TxtSex.Text;
user.Save();
}
}
所有数据库操作应该就在UserEntity的Save()方法,在这个方法里打开数据库连接,进行保存,然后关闭连接.
[解决办法]
up...
[解决办法]
.NET里面有个连接池的不要忽略了哦..这个作用非常大的..
你所谓的关闭其实并不是关闭数据库连接,其实还保存在连接池里的..
等下次调用的时候直接调用连接池的东西..
在你使用完资源之后记得释放资源哦.
.Close()并不是关闭数据库连接,,其实是释放资源..
[解决办法]
什么时候使用,就什么时候打开,用完就关闭
[解决办法]
其实还是马上哪个关闭好
要是想节省资源 那就使用ipc信道 把逻辑层 和数据层放到不同的进程内.
并实现soa 在逻辑层和数据层各自实现缓存每个进程上可以一4g的缓存那. 减少连接数据库的次数.
[解决办法]
用完就关
[解决办法]
用的時候打開,在PageUnLoad事件中判斷Connection鏈接狀態,打開時就關閉,這樣可以嗎?
------解决方案--------------------
认为马上关闭比较合理,实际上一般也都是这么做的。
[解决办法]
用完就关~
建议使用断开式连接
[解决办法]
帮顶~~~
[解决办法]
用完后马上关闭!
例如:
Page_Load 打开,用完就马上关闭。
Button1_Click 提交后,打开,也是用完后马上关闭。
因为有个连接缓冲池(connection pool),其实原理非常简单。当关闭一个连接,就用户(和ADO)而言,这个连接已经关闭。但实际上OLE DB并没有关闭这个连接,只是将其放入了非活动的连接缓冲池中。任何时候用户(或其他人)打开一个连接,OLE DB首先检测连接缓冲池中是否有相同连接细节的连接存在。如果有,将直接从缓冲池中取得此连接。如果没有,则为用户创建一个新的连接。为了避免浪费资源,经过一段缺省的时间段后,就从缓冲池中清除该连接。
打开一个连接可能是所进行的操作中最慢的操作之一,连接缓冲池使用户能与数据存储再次连接而无须重新创建连接。对于ODBC连接,连接缓冲池由ODBC Data Source Administrator控制。对于OLE DB,不能改变连接缓冲池(或叫会话缓冲池)。必须注意的是,连接缓冲池不是连接共享。一个连接只有在被客户关闭后才能再次使用。
内务处理
为了使连接缓冲池生效,必须确保内务处理(Housekepping)处于有序状态。这包括及时关闭Connection对象,这样它们才能回到缓冲池重新使用。你可能认为不断地打开、关闭连接对系统的开销很大,但必须衡量一下可扩展性——你的应用程序可能有许多人在使用,OLE DB又非常善于管理连接资源。
一般的原则是:尽可能晚地建立连接,同时又要尽可能早地关闭连接,这样保证连接打开的时间段最短。
[解决办法]
用完就关闭吧, 除非是winform应用.
[解决办法]
用完就马上关闭,需要再打开,那是网页,不是winform,难道要服务器一直连接着?
[解决办法]
asp.net是基于多进程的。
建议自己封装一个链接池。
每个进程打开关闭连接。
这是及效率与安全的最好的办法。
[解决办法]
我习惯用一个就马上关闭,下次要用再打开...
[解决办法]
up
[解决办法]
不知道如何用自己的代码控制oledb的连接池? (开源的自定义web表单工具,在: http://my5155.meibu.com )
[解决办法]
using(SqlConnection conn = new SqlConnnection(source))
{
conn.Open();
// Do something
conn.Close(); // this is not imperative, "using " insures against the rish of forgetting to close conn
}
-----
这样好点..
[解决办法]
什么时候使用,就什么时候打开,用完就关闭
[解决办法]
连接时候打开,用完就关闭
[解决办法]
不管什么情况下,对应什么操作,你只要频繁打开关闭数据库连接,都会造成很大的资源开销!
这就是为什么我们需要数据库连接池!
应用程序启动时,数据库连接池会初始化默认连接数,始终与数据库保持连接,从应用层来说,取得连接与释放连接只是操作的数据库连接池,将数据库连接池空闲的连接取得,用完再放回连接池。而连接池与数据库之间是始终保持连接的。
[解决办法]
打开,与数据库操作,关闭数据库.