如何“清除”一个物体?

时间:2011-01-18 20:56:38

标签: c#

清除对象的更好方法是什么:

1)在类中编写一个清除类的所有成员的方法:MyObject.Clear();

2)在我的代码中,在业务逻辑中,null对象:MyObject = null;

5 个答案:

答案 0 :(得分:12)

他们做不同的事情。将变量设置为null不会对对象本身产生任何影响。这可能意味着该对象现在有资格进行垃圾收集,但如果对同一对象有其他“实时”引用则没有区别。

你应该怎么做?那么,这完全取决于你的情况。如果你有很多不同的地方参考同一个对象,他们都应该看到“间隙”,然后修改对象。如果您只需要一个变量来引用不同的对象或根本没有对象,只需更改变量的值。

重要的是要知道两者之间的区别 - 要非常清楚变量的值永远不是对象 ...它是引用值或值类型值。

答案 1 :(得分:3)

我建议只构建一个对象的新实例,而不是清除它。

如果您完成了一个对象,但没有包含其引用的类,则将其设置为null可能是合适的。但是,如果它只是在一个方法中使用,你不需要做任何事情(垃圾收集器会在没有对象的引用之后的某个时候清理它) - 只是让它“消失”让它掉出来范围。如果它在集合中,您只需将其从集合中删除即可。

一个例外是对象实现IDisposable。在这种情况下,您可能需要调用它的Dispose()方法,或尝试构建代码以在using块中使用它,以便适当地清理其资源。

答案 2 :(得分:1)

第二个。 注意不要保留对对象的任何引用。任何绑定的事件处理程序,集合中的引用都会使您的实例“不合理”。

如果您来自C ++,请不要打扰垃圾收集器。我知道对内存性能的痴迷可能会导致操作内存收集过程。事实上,你不应该需要使用它。只需取消绑定任何引用。

答案 3 :(得分:0)

你的问题的答案是,“这取决于你。”这取决于你正在尝试用它做什么。如果你想保留对该特定实例的引用(即其他人对它有引用,或构建它很昂贵),那么你最好使用Clear方法。但前提是你要继续使用那个特定的对象实例。

如果你不再关心某个物体,那就停止参考它。通常,您不必将其设置为null,因为代码生成器可以确定对象生存期并使对象可用于垃圾回收。但是如果你想确保尽快收集对象(即在下一个垃圾收集周期中),那么设置MyObject = null是可行的方法。同样,这通常不是必要的,但它不会伤害任何东西。

答案 4 :(得分:0)

我不这么认为。在使用C#语言课程的时候我们有GC(垃圾收集)来促进这个变化非常困难,如果你使用C ++,它证明很容易