DataSet和DataTable都实现了IDisposable接口,因此按照传统最佳实践,我应该调用它们的Dispose()方法。
然而,从我迄今为止所读到的内容来看,DataSet和DataTable实际上没有任何非托管资源,因此Dispose()并没有实际作用。
此外,我不能仅仅使用using(DataSet myDataSet...)
,因为DataSet有一个DataTable集合。
因此,为了安全起见,我需要遍历myDataSet.Tables,处理每个DataTable,然后处理DataSet。
所以,是否值得在所有的DataSets和DataTables上调用Dispose()这么麻烦呢?
附录:
对于那些认为DataSet应该被销毁的人们:
通常,处理销毁对象的模式是使用using
或try..finally
,因为你想要保证Dispose()将被调用。
但是,对于集合来说,这很快变得混乱。例如,如果其中一个Dispose()的调用引发异常怎么办?您会忽略它(这是“不好”的),以便可以继续处理下一个元素吗?
还是建议我只调用myDataSet.Dispose(),而忽略在myDataSet.Tables中销毁DataTables的操作呢?
try { some.Dispose(); } catch {}
足矣。 - LukeSwDispose
最坏的情况下很可能只是一个无操作。 - user7116