手动收集垃圾?

时间:2014-04-21 19:35:14

标签: c# manual garbage

Person p = new Person("Bob", 10);
p = new Person("James", 20);

原来我失去了对包含“Bob”的实例的引用。如果我不想依赖c#的GC,我怎么能在重新分配p指向James之前亲自删除这个实例?只是为了避免额外的垃圾。

3 个答案:

答案 0 :(得分:3)

你不能。你只能要求GC执行收集,但是没有办法说它实际上会占用你的对象(你也不能要求GC只收集一个对象)。

  

GC.Collect Method

     

强制所有世代立即进行垃圾收集。

除非你有非常好的理由(看起来你不是),否则你不应该这样做。

答案 1 :(得分:0)

可以通过调用Collect强制进行垃圾收集,但大多数情况下,应该避免这种情况,因为它可能会产生性能问题。

从这里采取:http://msdn.microsoft.com/en-us/library/66x5fx1b.aspx

答案 2 :(得分:0)

您可以重复使用该实例,而不是替换它:

Person p = new Person("Bob", 10);

p.Name = "James";
p.Number = 20;

这样就没有松散的Bob实例引用。

但是,为了代码可读性并避免潜在的错误,您不应该以这种方式重用变量。