当客户端调用CoCreateInstance并关闭意外时,进程外COM服务器内存泄漏

时间:2013-04-09 14:22:12

标签: windows com memory-leaks garbage-collection com-interop

我实际上是Out-of-Proc,DllSurrogate COM-Server,用C ++,ATL编写,在我之前的S.O.中提到过。 question。我使用CoCreateInstance从许多客户端和C#应用程序创建和/或连接来自COM-Server的单例。在完成使用COM-object之后的两个中都调用了相应的释放。 在Delphi中,当接口超出范围时,它基于接口Release Reference Count,在C#中它被称为Marshal.ReleaseComObject,直到看起来一切正常。

问题是当客户端应用程序意外关闭时,例如从进程中死亡或崩溃。在这种情况下,COM对象保留在内存中,加载到DLLHOST.exe中。

是否有一些标准方法可以避免此类泄漏?或者可能是问题在于如何编写COM-Server本身(我有消息来源他们不是我的责任,我不知道ATL)

编辑:我发现COM拥有自己的垃圾收集机制,可以在6-8分钟后清除孤立的COM对象(坦克到@Simon Mourier)。现在应用逻辑来处理剩余的孤立COM对象,比如重新初始化它或其他东西。

0 个答案:

没有答案