垃圾收集在c#中处理数据表数组

时间:2010-11-07 11:58:13

标签: .net arrays garbage-collection datatable dispose

我是GC的新手, 如果我想发布一个数据表数组,在所有数据表上调用dispose()就足够了吗?我是否也需要将null设置为数据库数组?还是每个数据表?

这够了吗?:

 DataTable[] myTables = null;
             try
             {
                 myTables = DB.GetTables();

                 // use myTables....
             }
             finally
             {
                 // Dispose Data Tables
                 if (myTables != null)
                 {
                     foreach (DataTable dt in myTables)
                     {
                         if (dt != null)
                             dt.Dispose();
                     }
                 }
             }

3 个答案:

答案 0 :(得分:3)

对于垃圾收集,您必须 nothing

由于DataTable实现了IDisposable,因此最好在所有这些上调用Dispose()(就像你正在做的那样)。仅在极少数情况下才需要设置对null的引用。不在这里。

但是Dispose()是关于释放托管和非托管资源,而不是关于垃圾收集 对于DataTbales,Dispose()实际上并不是必需的,但你不想知道这一点。如果一个类有一个Dispose()成员,请调用它。

答案 1 :(得分:2)

不,你不需要再做任何事了。

垃圾收集器知道数组何时不再使用,并且从代码中的那一点开始,它可以收集数组及其内部的所有内容。将数组引用或任何数据表引用设置为null只是不必要的工作。

答案 2 :(得分:1)

垃圾收集是一个非常昂贵的过程,这就是为什么微软决定将其自动化,以便在系统具有运行它的备用容量或资源变得太低时运行。

因此,作为一般的经验法则,当您使用非托管对象(例如COM引用)或遇到性能问题时,您应该只需要担心显式垃圾回收,并且您发现手动垃圾回收可以帮助您