不会。我查阅了MSDN(该文中有 继承自 DataSet 的类不是由垃圾回收器完成的,原因是在 DataSet 中已取消终结器。派生类可以在其构造函数中调用 ReRegisterForFinalize 方法以允许垃圾回收器完成该类。),而对于DataTable无相关的说明,所以只好反编译了下DataSet和DataTable的源代码,在DataSet和DataTable的构造函数中都有同样一句话GC.SuppressFinalize(this); 这句话的意思是说 请求系统不要调用指定对象的终结器。 所以从这个层面来理解的话是不会被垃圾回收的。
个人一点愚见,如有博友有其他解释,请留言。
回复补充:如果说DataTable会被垃圾回收的话,在ADO.NET中DataSet使用DataTable对象。那么现在如果DataTable被回收了,DataSet不被回收,此时再访问DataSet的时候结果是什么??
我也非常想搞明白,大牛出来给解释下吧!
SuppressFinalize似乎指的是GC不将该对象放入FinalizeQueue中,即当该对象被置为unreachable时,直接回收而不调用Finalize过程,因此Dataset和DataTable还是被回收的,只是省了回收前的Finalize调用过程
会被回收的。
Dataset不会被回收,原因是:
继承自 DataSet 的类不是由垃圾回收器完成的,原因是在 DataSet 中已取消终结器。派生类可以在其构造函数中调用 ReRegisterForFinalize 方法以允许垃圾回收器完成该类。
DataTable能被回收: 因为他并没有像Dataset那样会取消终结器, 也不需要调用ReRegisterForFinalize.
msdn的解释:
继承自 DataSet 的类不是由垃圾回收器完成的,原因是在 DataSet 中已取消终结器。派生类可以在其构造函数中调用 ReRegisterForFinalize 方法以允许垃圾回收器完成该类。
datatable 不知道 关注