C# 如何使垃圾收集清理绑定到out proc COM服务器的RCW对象?

C# 如何使垃圾收集清理绑定到out proc COM服务器的RCW对象?,c#,.net,com,garbage-collection,rcw,C#,.net,Com,Garbage Collection,Rcw,我有一个运行数天的64位.NET进程。该进程使用使用DCOM的本机32位COM服务器。有时COM服务器会耗尽内存,因为.NET process垃圾收集器只会看到COM对象的RCW,而且这些对象非常轻量级,“不值得收集”。我需要让垃圾收集器知道这些COM对象 作为记录,我尝试定期运行相同的代码强制启动垃圾收集,问题消失了,因此问题不是某种泄漏,只是收集的对象不够快 是的,我知道有GC.AddMemoryPressure()可以告诉垃圾收集器我们现在正在消耗更多内存。问题是64位.NET进程可能会将

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

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

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

因此,对于64位进程来说“没什么大不了的”,对于32位进程来说肯定是大不了的,我需要以某种方式使64位进程的垃圾收集器对另一个进程使用的内存量更加敏感


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

您熟悉如何释放COM对象吗?这可能是潜在的问题和/或问题。。我会在@MethodMan上进行谷歌搜索是的,我使用它。请提供可靠的重现问题的方法。在没有看到实际代码的情况下,有太多可能的场景和原因需要考虑,也没有办法确切地知道什么会修复您的特定场景。@ PtEddUnIO,我需要发布COM服务器的所有依赖项和一个值得在这里进行几个小时处理的TestSub,为您提供一个“完整”的示例。无论如何,我已经证实了强制垃圾收集确实会带来不同,我一点也不知道一个代码示例将如何帮助任何人。