是否有必要处置无法填充的DataTable?

时间:2011-04-07 16:49:50

标签: .net datatable dispose

我有一个使用DataTable

填充SqlDataAdapter的函数
// ...
using (SqlDataAdapter dataAdapter = new SqlDataAdapter(command))
    try
    {
        dataAdapter.Fill(dataTable);
    }
    catch
    {
        dataTable.Dispose();
        dataTable = null;
    }

现在,我不喜欢货物崇拜节目,所以如果没有必要,我宁愿没有try - catch块。是否有必要使Dispose DataTable无法填补?

3 个答案:

答案 0 :(得分:1)

不,不需要调用Dispose。这样做不会释放已用于该对象的内存,即使您没有调用Dispose,GC也会在以后取出它。您可以阅读有关此here的更多信息。

答案 1 :(得分:1)

由于try块失败,因此无需调用对象上的Dispose

答案 2 :(得分:1)

如果您的代码创建了一个特定显式具体类型的对象,该对象被记录为将IDisposable.Dispose实现为无操作,那么可以安全地执行直接或间接处理。如果Dispose确实什么都不做,那么处置或不处理都不会影响任何事情。

另一方面,如果您的代码使用类似工厂方法的东西来创建实现IDisposable的可继承类型的对象,或者如果您的代码被赋予了对此类对象的所有权,那么您应该将其处置掉。即使你期望获得一个不需要Disposed的类的对象,也无法确保你的类不会接收一个需要被Disposed的派生类型。请注意,通常,在将IDispsoable.Dispose实现为no-op的类上调用Dispose将非常快;对于可能或可能不需要IDisposable来实现Dispose作为无操作的类通常更有效,并且让类的用户无条件地调用Dispose,而不是要求类的用户测试对象是否是IDisposable,并且Dispose如果是这样的话。