conn.open() conn.close() 连接池,效率问题

yongfa365 2008-08-27 05:19:16
我现在使用一个组件
http://www.cnblogs.com/yueue/archive/2007/05/13/745055.html
但发现一个问题,不知道有没有影响,
我以前用vbs时,如果conn.open后做其它操作都很快,但conn.open这个过程很慢,而我看到这个程序里,每执行一次函数如:
/// <summary>
/// 执行数据库命令返回受影响的行数
/// </summary>
/// <param name="SQLText">SQL语句</param>
/// <returns>受影响的行数</returns>
public int ExecuteNonQuery(string SQLText)
{
if (IsProcedure(SQLText)) { mCommand.CommandType = CommandType.StoredProcedure; } else { mCommand.CommandType = CommandType.Text; }
mCommand.CommandText = SQLText;
try
{
mCommand.Connection.Open();
return mCommand.ExecuteNonQuery();
}
finally
{
mCommand.Connection.Close();
ClearParameters();
}
他都会先conn.open执行完后再conn.close一次,

现在的问题是:如果我一页要执行10多条这个函数,每次都open后再close会不会影响执行效率,影响有多大?
因为以前的VBS我感觉影响非常大,而听说.net 有连接池,即便我close了,下次链接时open会从池里取,原不是像第一次那样执行,所以速度不会有什么影响?请问是这样吗?麻烦各位指点一二.
...全文
273 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yongfa365 2008-08-29
  • 打赏
  • 举报
回复
看来天下同一心哪,


没有影响,但频繁的open及close应该不好,比如,要插入10000条记录,没必要open了再close,但一般不插入这么多,所以为了方便还是直接写到一个里面,在那里open,完后再close,应用时不用写那么多代码
  • 打赏
  • 举报
回复
其实仍然应该考虑减少Open,ExecuteNonQuery这个方法按说不应该在内部Open,在外边统一管理。
  • 打赏
  • 举报
回复
[Quote=引用楼主 yongfa365 的帖子:]
我以前用vbs时,如果conn.open后做其它操作都很快,但conn.open这个过程很慢,而我看到这个程序里,每执行一次函数如: [/Quote]

vbs的open方法哪有连接池功能?这不是很明显不同嘛。
GhostAdai 2008-08-28
  • 打赏
  • 举报
回复
接分!
blestcc 2008-08-28
  • 打赏
  • 举报
回复
雖然沒有真正關閉,但還是統一管理比較好
zhnzzy 2008-08-28
  • 打赏
  • 举报
回复
告诉你,不用担心
同意这个

又见connection忧虑贴

mCommand.Connection.Close();

不是把连接真正的关闭,而是把连接归还给连接池。

mCommand.Connection.Open(); 其实就是从连接池取连接
格拉 2008-08-28
  • 打赏
  • 举报
回复
beijingbeerman 2008-08-28
  • 打赏
  • 举报
回复
可以吧open数据库链接,和close数据库单独写成两个方法。这样只是打开一次数据库,操作完成之后统一关闭,减少开关次数。
simonezhlx 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 sxmonsy 的回复:]
引用 3 楼 jzywh 的回复:
又见connection忧虑贴

mCommand.Connection.Close();

不是把连接真正的关闭,而是把连接归还给连接池。

mCommand.Connection.Open(); 其实就是从连接池取连接
[/Quote]
学习
amandag 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jzywh 的回复:]
又见connection忧虑贴

mCommand.Connection.Close();

不是把连接真正的关闭,而是把连接归还给连接池。

mCommand.Connection.Open(); 其实就是从连接池取连接
[/Quote]
lude8880 2008-08-28
  • 打赏
  • 举报
回复
蹭分
diandian82 2008-08-28
  • 打赏
  • 举报
回复
不过这种做法不值得提倡。
sxmonsy 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jzywh 的回复:]
又见connection忧虑贴

mCommand.Connection.Close();

不是把连接真正的关闭,而是把连接归还给连接池。

mCommand.Connection.Open(); 其实就是从连接池取连接
[/Quote]
simonezhlx 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 yongfa365 的帖子:]
我现在使用一个组件
http://www.cnblogs.com/yueue/archive/2007/05/13/745055.html
但发现一个问题,不知道有没有影响,
我以前用vbs时,如果conn.open后做其它操作都很快,但conn.open这个过程很慢,而我看到这个程序里,每执行一次函数如:
/// <summary>
/// 执行数据库命令返回受影响的行数
/// </summary>
/// <param name="SQLText">SQL语句 </param>
/// <retu…
[/Quote]
其它主要还是性能问题,第一是没办法适时的释放连接资源.频繁打开与关闭是否会对性能构成影响.不知道是否真有影响.
yongfa365 2008-08-27
  • 打赏
  • 举报
回复
已测试,效率没有影响,不管是连接远程还是连接本地数据库进行1000次写入,结果都只是差几百毫秒,可见jzywh说法是正确的,

以前没考虑这个问题,今天同事提到,我才想到这问题,没想到Microsoft都已经把这问题给解决了。
jzywh 2008-08-27
  • 打赏
  • 举报
回复
又见connection忧虑贴

mCommand.Connection.Close();

不是把连接真正的关闭,而是把连接归还给连接池。

mCommand.Connection.Open(); 其实就是从连接池取连接
浮生若梦丶 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 stning 的回复:]
是的,有内置,但其实你可以自己写一个类来控制连接数。
[/Quote]
stning 2008-08-27
  • 打赏
  • 举报
回复
是的,有内置,但其实你可以自己写一个类来控制连接数。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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