调用 GC.Collect() 是仅对您的进程还是对所有进程进行垃圾收集?

Does Calling GC.Collect() Do Garbage Collection On Only Your Process or All Processes?

当您在一台机器上调用 GC.Collect 时,它是对整个 machine/all 进程进行收集还是只对调用它的进程进行收集?

这里只有两个答案可供选择:

  1. 所有进程
  2. 仅调用进程

*请不要回复“你不应该强制垃圾回收”。有很多关于那个的帖子。

为了便于讨论,假设您继承了有史以来最糟糕的应用程序,该应用程序会产生大量垃圾,运行s 重复进程,最终由于 运行ning 每天崩溃一次记忆。您没有修复它的源代码,但它必须保持 运行ning,因为您的业务依赖于它。您能否每 30 分钟为 运行 创建一个实用程序应用程序以强制在机器上进行垃圾收集以防止该进程 运行 内存不足?

只有你的过程。 .Net 运行时在您自己的进程中实例化,因此您只能控制自己的 .Net 内部。

你的过程只是如前所述。我想添加以下内容并提供可能的解决方案:

您的应用程序可能正在泄漏内存,如果您拥有源代码,GC.Collect 将无济于事。解决这个问题的方法是将您的虚拟内存增加到您当前获得的内存的许多倍。您还可以编写一个看门狗应用程序,当它因内存不足而崩溃时会自动重新启动应用程序。

假设您有大量虚拟内存,泄漏的内存将被分页到磁盘,永远不会被再次访问,并且可能对性能影响很小或没有影响,并且延迟不可避免的事情足以让您进行干预并优雅地重新启动应用程序。