小编典典

我应该 Dispose() DataSet 和 DataTable 吗?

all

DataSet 和 DataTable 都实现了 IDisposable,因此,按照常规的最佳实践,我应该调用它们的 Dispose() 方法。

但是,从我目前所读到的内容来看,DataSet 和 DataTable 实际上没有任何非托管资源,因此 Dispose() 实际上并没有做太多事情。

另外,我不能只使用using(DataSet myDataSet...),因为 DataSet 有一个 DataTables 集合。

因此,为了安全起见,我需要遍历 myDataSet.Tables,处理每个 DataTable,然后处理 DataSet。

那么,在我的所有数据集和数据表上调用 Dispose() 是否值得?

附录:

对于那些认为应该处置 DataSet 的人:通常,处置模式是使用usingor try..finally,因为您想保证 Dispose()
将被调用。

然而,这对于一个集合来说变得非常难看。例如,如果对 Dispose()
的调用之一引发异常,您会怎么做?你吞下它(这是“坏的”),以便你可以继续处理下一个元素吗?

或者,您是否建议我只调用 myDataSet.Dispose(),而忘记在 myDataSet.Tables 中处理 DataTables?


阅读 65

收藏
2022-06-24

共1个答案

小编典典

这里有几个讨论解释了为什么 DataSet 不需要 Dispose。

处置还是不处置?

DataSet 中的 Dispose 方法的存在只是因为继承的副作用——换句话说,它实际上并没有在终结中做任何有用的事情。

应该对 DataTable 和 DataSet 对象调用 Dispose
吗?
包括来自
MVP 的一些解释:

system.data 命名空间 (ADONET) 不包含非托管资源。因此,只要您没有为自己添加一些特殊的东西,就不需要处理任何这些。

了解 Dispose
方法和数据集?
有权威斯科特艾伦的评论:

在实践中,我们很少 Dispose 数据集,因为它提供的好处很少”

因此,共识 是目前没有充分的理由在 DataSet 上调用 Dispose。

2022-06-24