tinectionn 那里买得到

DbConnection有什么作用_百度知道lmpetgection是什么意思_百度知道couection 是什么意思_百度知道DBTransaction导致的DBConnection没有关闭
最近在项目中发现一个现象,数据库操作都很快,但是反映在界面上,执行速度却很慢,最终报错:连接超时或连接池已满。通过SQLServer的连接管理器调试,发现了大量没有关闭的连接。而导致这个结果的原因在于,程序中使用了DBTransaction。
我们当时猜测,当DBTransaction提交或回滚时,应该将关联的DBConnection关闭。然而,通过查看DBTransaction的源代码,发现在它提交或回滚时,仅仅是将其_connection置为null。问题又来了,系统中用的DBTransaction是通过他人封装的一个组件来获得的,并没有创建一个DBConnection,也就导致了当Commit或RollBack以后,无法获得与之关联的DBConnection。
解决的方法也很简单,在获得DBTransaction之后,马上将其DBConnection保存到一个变量里,在Commit或RollBack以后,主动通过这个变量将DBConnection关闭。但是要注意的是,如果某个方法仅仅是使用一个DBTransaction,而没有主动创建它,那么就不能将其连接关闭。
创建DBTransction后Commit或RollBack前,保存DBConnection到一个变量中,Commit或RollBack后,主动将其关闭
只能在创建DBTransaction的方法中关闭DbConnection。原因也很简单,因为只有创建DBTransaction的方法才知道何时是关闭的最佳时机
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。114网址导航

参考资料

 

随机推荐