COM对象通常具有确定性的销毁:只有在最后一个引用被释放时才会被释放。
C#中的COM互操作如何处理这种情况?这些类没有实现IDisposable
接口,因此我看不到触发显式IUnknown :: Release的方法。
一个简单的测试显示,未引用的COM对象会被惰性地回收(即由垃圾收集器来触发释放)。对于需要被积极释放的COM对象(例如持有大型或共享的关键资源),我应该怎么办?
原始问题:我们有一个强烈依赖COM库的C#应用程序,并且它泄漏得非常厉害。似乎问题出现在C++和C#代码之间(我们可以访问两者),但我们无法找到问题所在。