1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > c mysql 关闭连接池_数据库连接池关闭的时间

c mysql 关闭连接池_数据库连接池关闭的时间

时间:2024-02-15 05:36:49

相关推荐

c  mysql 关闭连接池_数据库连接池关闭的时间

上一篇说到分析关闭连接与不关闭连接的性能,到后来我发现自己得出的结论有误。经过多次测试发现关闭连接和不关闭连接耗费的时间基本一样。进哥也说了这是有连接池的原因。其实,自己以前对了解的不深,于是就到网上搜了下连接池。发现好多文章都差不多,现在网上文章到处转载啊。数据库连接池设置浅析就是一篇,话说里面关于连接池关闭的时间是这样描述的 2.何时关闭连接池?

当连接池中的所有连接都已经关闭时关闭连接池。

看了之后我也迷糊了,在我的程序中也没有其他的连接: public static voidInsertError() {

SqlConnectionconn = newSqlConnection(connString);

stringcmdtxt = "INSERT INTO [NcuhomeORG].[dbo].[SysErrorLogs]([ErrorLogID],[ErrorMsg] ,[ErrorUrl],[ErrorDatetime])VALUES (1,'hahah','fffff','-12-26 11:33:08')";

SqlCommandcmd = newSqlCommand(cmdtxt, conn);

conn.Open();

cmd.ExecuteNonQuery();

conn.Close();

}

上面程序一直在循环执行(如有不清楚可以查看上一盘文章),而且每次都关闭了连接,那岂不是每次都要创建连接池。

在我之前的测试中我发现,每次我重启电脑之后的第一次运行程序的时间一定比其他的时间长,我想在是这是创建连接池花费了很多时间。相比之下每次new SqlConnection(),并执行SQl操作所需的时间只要创建连接池的十分之一时间。

现在基本上确定了那篇文章关于连接池关闭的时间是错误的,于是我就在想连接池到底是在什么时候关闭的。也提出了些想法:

在所有连接关闭之后的一定时间内关闭;

应用程序关闭的时候关闭;

那么我也就开始测试了,我在每次执行过方法后让进程阻塞。5s,10s,20s,发现多没有明显的变化。纠结,我总不能去测试1h吧。就这样我暂时放弃了这个测试。

在应用程序结束的时候关闭,不就是关闭浏览器吗?简单,但是测试了好多次发现运行时间没有明显的差距。不是这个问题了。

最后还是到网上去找连接池关闭的时间,查看官方的文档吧:了解连接池。这篇文章里讲了连接池关闭的时间:

连接的移除

如果连接长时间空闲,或池进程检测到与服务器的连接已断开,连接池进程会将该连接从池中移除。请注意,只有在尝试与服务器进行通信后,才可以检测到这种情况。如果发现某连接不再连接到服务器,则会将其标记为无效。连接池管理程序会定期扫描连接池,查找已释放到池中并标记为无效的对象。找到后,这些连接将被永久移除。

如果存在一个与已消失的服务器的连接,如果连接池进程尚未检测到断开的连接并将连接标记为无效,可以从池中提取此连接。当发生这种情况时,将生成异常。但是,为了将该连接释放回池中,仍必须将其关闭。

连接池的问题算是解决了,我又有了问题,可这是概念理解的问题:

protected voidPage_Load(objectsender, EventArgse) {

Actionc = () => tests();

test.Profile(c, 15);

}

protected voidtests() {

SqlConnectionconn = newSqlConnection(ConfigurationManager.ConnectionStrings["NcuhomeORGConnectionString"].ConnectionString);

if(conn.State != ConnectionState.Open)

conn.Open();

else{

Response.Write("不用连接

");

}

}

最终页面一篇空白,我那时候是不明白啊。这里想到了,没有关闭的连接就一直占用着的,于是在new的时候肯定是一个新的连接了。也就是说每次new出来的SqlConnection的状态一定是关闭的。也就想到了上一篇文章的测试没有用啊,在连接之前判断反而是画蛇添足啊!

以上的内容是个人见解,如有任何意见或见解希望能提出来!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。