是否有必要在.net中明确地处理每个对象?

时间:2011-08-08 05:14:23

标签: asp.net

我正在开发一个应用程序,在这个应用程序中,我用来编写整个代码的每个方法或事件都在try ... catch ... finally block.Here是我以前编写的代码的结构。

//Some Declarations 
DataTable dt = new DataTable() 
try
{
     //Some code

}
Catch
{

}
Finally
{
  dt = null;
} 

这就是我以前编写代码的方式。我的问题是我只在try子句中使用datatable。所以有必要在finally子句中配置dt。因为我教这么做。但据我所知,如果我在try子句中声明dt,一旦try的范围结束,它将自动处理并设置为null。那么哪一个更好的方法呢?

提前致谢...

4 个答案:

答案 0 :(得分:3)

dt = null;不会处置该对象。它只是删除了引用。如果dt位于方法中且其范围以方法结束的位置结束,则无需为其指定null

null分配给变量后,该对象就有资格进行垃圾回收!我的意思是说...... GC会检查堆中的每个对象是否在某处被引用,如果没有,则将其标记为垃圾。检查完所有对象后,开始收集过程。通过将null分配给dt,您通知GC该对象是垃圾。因此,在下一个集合中,它将被收集。

答案 1 :(得分:1)

如果在try中或try块之前声明了数据表,则不会“处理”。处置对象通常与IDisposable接口和using语句有关。确实需要处理某些对象,因为它们在后台使用资源(如Sql连接)。我没有看到为什么需要对数据表进行此操作。

此外,我认为在你的finally块中将dt设置为null没有意义,它不会加速垃圾收集或关闭任何其他资源。

请参阅此其他堆栈溢出问题.... Should I Dispose() DataSet and DataTable?

答案 2 :(得分:0)

绝对是处理IDisposable的所有对象(如果可能)的最佳做法。如果您不关心异常,可以使用using语句。类似的东西:

using(DataTable dt = new DataTable())
{
// code here
}
// datatable is disposed

答案 3 :(得分:0)

如果您愿意,可以使用Using语句。

声明:

using (ResourceType resource = expression) statement

相当于

{  
    ResourceType resource = expression;
    try {
        statement;
    }
    finally {
        ((IDisposable)resource).Dispose();
    }
}

所以我猜你可以编码:

using(DataTable dt = new DataTable)