使用带有类型化数据集表适配器的“使用”语句

时间:2010-08-11 14:21:38

标签: c# .net dispose using

简单问题。使用类型化数据集表适配器时使用using语句很重要吗?我在网上看到的大多数例子都不使用using语句。

using (Data_ItemTableAdapter adapter = new Data_ItemTableAdapter())
{

    DataItemTable = a.GetDataByDataItemID(DataItemID);
    // more code here
}

感谢您的帮助!!

编辑:似乎普遍的共识是在这种情况下使用“使用”可能是一个好主意,因为它肯定不会受到伤害,并且它不需要太多努力。只是不确定是否值得回顾这个旧项目并更改所有代码。谢谢你的建议!

4 个答案:

答案 0 :(得分:6)

如果一个类实现了IDisposable接口,那么将对象包装在using语句中或手动调用Dispose方法可能更安全。

在这种情况下,我不相信数据适配器正在使用任何未管理的资源,因此dispose可能不会做任何事情。但是,包装它会更安全,因为将来它可以。

答案 1 :(得分:4)

如果某些东西实现了IDisposable,我建议大部分时间使用()包装它。自动调用Dispose()+ Try / Finally免费?很难被击败。

答案 2 :(得分:2)

在这种特殊情况下,这并不重要,但要知道你需要深入了解适配器。

一般来说,如果有疑问,肯定不会受到伤害,如果它有Dispose(),请使用using

答案 3 :(得分:2)

如果某些东西实现了dispose,那就意味着它可能实现了自定义终结器。调用dispose应该(如果写得正确)抑制CG调用它。如果要求CG调用类的终结器,则CG将不得不在从内存中删除对象时做额外的工作。它会将它推广到CG的下一个级别,因此该对象将在内存中停留更长时间。

因此,即使您认为调用它并不重要,但无论如何它可能是一个好主意,因为它很可能允许更有效的垃圾收集。事实上,如果Dispose存在,它可能是有原因的,应该使用。将它放在using语句中是解决这个问题的最简单方法。

有关Finalizers and the GC in .NET

的信息