我是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();
}
}
}
答案 0 :(得分:3)
对于垃圾收集,您必须 nothing 。
由于DataTable实现了IDisposable,因此最好在所有这些上调用Dispose()
(就像你正在做的那样)。仅在极少数情况下才需要设置对null
的引用。不在这里。
但是Dispose()
是关于释放托管和非托管资源,而不是关于垃圾收集
对于DataTbales,Dispose()实际上并不是必需的,但你不想知道这一点。如果一个类有一个Dispose()成员,请调用它。
答案 1 :(得分:2)
不,你不需要再做任何事了。
垃圾收集器知道数组何时不再使用,并且从代码中的那一点开始,它可以收集数组及其内部的所有内容。将数组引用或任何数据表引用设置为null只是不必要的工作。
答案 2 :(得分:1)
垃圾收集是一个非常昂贵的过程,这就是为什么微软决定将其自动化,以便在系统具有运行它的备用容量或资源变得太低时运行。
因此,作为一般的经验法则,当您使用非托管对象(例如COM引用)或遇到性能问题时,您应该只需要担心显式垃圾回收,并且您发现手动垃圾回收可以帮助您