我怎么能故意溢出我的记忆,强迫垃圾收集? 有人可以提出这样的算法:
while ( garbage collector starts ) {
overflow my memory with something easily disposable
}
编辑: 对于那些有用GC.Collect方法的人。我一直都认为,GC不能强制以程序化的方式发生。猜猜,我错了。谢谢你的回答。
答案 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)
你不能只调用GC.Collect()
http://msdn.microsoft.com/en-us/library/system.gc.collect.aspx