我有一个使用DataTable
SqlDataAdapter
的函数
// ...
using (SqlDataAdapter dataAdapter = new SqlDataAdapter(command))
try
{
dataAdapter.Fill(dataTable);
}
catch
{
dataTable.Dispose();
dataTable = null;
}
现在,我不喜欢货物崇拜节目,所以如果没有必要,我宁愿没有try
- catch
块。是否有必要使Dispose
DataTable
无法填补?
答案 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如果是这样的话。