溢出我的记忆,强制垃圾收集器?

时间:2010-09-24 21:30:22

标签: c# memory garbage-collection overflow

我怎么能故意溢出我的记忆,强迫垃圾收集? 有人可以提出这样的算法:

while ( garbage collector starts ) {
      overflow my memory with something easily disposable
}

编辑: 对于那些有用GC.Collect方法的人。我一直都认为,GC不能强制以程序化的方式发生。猜猜,我错了。谢谢你的回答。

7 个答案:

答案 0 :(得分:8)

更好的是,如何使用GC.Collect?当有明确的特征可用时,无需合成条件......

另外,请注意Adam Butler (上面的评论),ChristopheD GC.WaitForPendingFinalizers和Michael Petrotta answer below方法(下面的评论)指出,这将采取下一步措施。但是,该方法文档中的可怕引用:“运行终结器的线程未指定,因此无法保证此方法将终止。” shudder < / p>

答案 1 :(得分:4)

除了使用GC.Collect之外:如果您真的需要同步“完成”垃圾收集(换句话说,阻止),您可以使用GC.WaitForPendingFinalizers:{{ 3}}

请注意,这可能会不必要地暂时冻结您的应用程序。

该链接还提供了可以触发垃圾收集器的代码。

答案 2 :(得分:2)

答案 3 :(得分:1)

像这样,例如:

int cnt = GC.CollectionCount(0);
while (GC.CollectionCount(0) == cnt) {
  string s = new String('*', 1000);
}

但是,这当然只会在垃圾收集发生之前运行,但它可能不是因为创建的对象而存在,它可能是出于任何原因。

如果您只想进行垃圾收集,GC.Collect方法就可以了。

但是,很少有任何理由强制进行垃圾回收。收集将在需要时发生,通常只会通过强制收集来降低性能。

答案 4 :(得分:0)

是否有某些原因GC.Collect()不适合你?这会强制进行垃圾收集。

答案 5 :(得分:0)

为什么不使用GC.Collect来强制进行垃圾回收呢?

答案 6 :(得分:-2)