1

我有一个运行数天的 64 位 .NET 进程。该进程使用使用 DCOM 的本机 32 位 COM 服务器。COM 服务器偶尔会耗尽内存,因为 .NET 进程垃圾收集器只能看到 COM 对象的 RCW,而且这些 RCW 非常轻量级并且“不值得收集”。我需要以某种方式让垃圾收集器知道那些 COM 对象。

作为记录,我尝试定期运行相同的代码强制启动垃圾收集并且问题消失了,因此问题不是某种泄漏,只是对象收集速度不够快。

是的,我知道GC.AddMemoryPressure()可以告诉垃圾收集器我们现在正在消耗更多内存。问题是 64 位 .NET 进程可能将其视为“没什么大不了的”——它是 64 位的,好吧,这里是千兆字节,那里是另一个千兆字节——“谁在乎”,但是对象实际存在的 32 位进程对这些分配更为敏感。

所以对于 64 位进程来说可能是“没什么大不了”的东西对于 32 位进程来说肯定是一个大问题,我需要以某种方式使 64 位进程的垃圾收集器对使用的内存量更敏感通过另一个过程。

我该如何处理这种情况,以使 64 位进程及时收集 RCW 并且 32 位 COM 服务器不会耗尽内存?

4

0 回答 0