日期:2014-05-19  浏览次数:20383 次

这两种效率哪一种更高?关于数据库连接和关闭
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鏈接狀態,打開時就關閉,這樣可以嗎?
------解决方案--------------------