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

connection关闭的问题
我在DAL里写了个类DataBase,声明一个private   OleDbConnection   Conn;
然后他的构造函数里this.Conn   =   new   OleDbConnection(str);
this.Conn.Open();
在类的析构函数里this.Conn.Close();
                    this.Conn.Dispose();
然后在DataBase类里定义一些方法,用到Conn,返回DataRead,DataTable之类的东西。我每创建一次DataBase对象,调用对象函数后,是否应该显示调用DataBase的析构。我现在没有主动调用该析构,结果发现Conn的Close的次数明显少于Open。按道理,系统应该主动调用析构啊。不知道我说明白没。请大侠解释一下!

------解决方案--------------------
在.net中并不是这个类不用就会立即释放资源的,它是有垃圾回收器自动搜集无用的对象,然后调用其Finalize()方法,释放资源,c#中类的析构函数实际上是在调用Finalize()时候才调用,所以Open()的数量多于close()的数量很正常,说明还有类的对象没有释放资源。。你可以用GC.collect();强制回收。但是当前类在使用的时候你调用GC.collect()它也不回回收的。。。

conn.close();不应该放到析构函数中,你这是c++的思维。。。你应该在类中用方法实现。
------解决方案--------------------
.net 的析构函数 的执行 并不是 像 c++ 中 那么的 实时


对于 链接 一定要 在 使用 后 马上关闭.

即 关闭 代码 应该 紧凑于 你的数据操作后.

------解决方案--------------------
哦,写错了一句:

在dispose里写(idispose接口)那两条语句 --> 在dispose里写(idisposable接口)那两条语句