一尘不染

GC.Collect()

c#

好的,我已经阅读了几个有关它的主题,但是就可以了。假设我有一个应用程序,基本上我会不时地单击一个按钮,很多事情将在几分钟后发生,然后它可能会再空闲一个小时,甚至可能只有一分钟。在这一切结束之后,难道不是要给GC.Collect打电话吗?我的意思是,我知道那一刻我不会使用我的应用程序,而GC无法猜测。


阅读 1247

收藏
2020-05-19

共1个答案

一尘不染

我可以看到有几个人对不建议调用GC.Collect变得极端。

GC.Collect的存在是有原因的,这是我建议何时以及为何调用GC.Collect的建议。

  1. 通常,不必担心调用它,GC会很好地进行调整,并且会做正确的事情。

  2. 有时,您遇到的情况是您肯定知道现在是调用它的正确时间,而上述情况恰好是调用它的正确时间,实际上Asp.Net在某些时候调用了GC.Collect。与您所描述的相似。

  3. GC聪明地调用了GC.Collect,如果您调用了GC.Collect,则GC可以覆盖您的决定,但仍然无法收集(调用GC.Collect时必须设置一个标志才能选择此行为),这是推荐的调用GC.Collect的方式,因为您仍要让GC决定是否是收集的好时机。

  4. 不要以为我推荐的是调用GC.Collect的一般说法,除非您确实确定需要调用它,否则应始终避免调用它,您所描述的情况正是GC.Collect出现的原因。

  5. 调用它所获得的好处是可以快速释放垃圾,通常,如果出现这种情况,您将在意这种情况

    1. 您处在内存不足的情况下,并且希望急于进行收集,如果您处在内存不足的情况下,无论如何,GC都将变得很激进,并且在计算机上的内存压力很高时,它将自动启动
    2. 如果您要避免陷入内存不足的情况,并且希望热心收集。

希望这可以帮助。
谢谢

2020-05-19