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