TypeToTypeInfoMarshaler 内存泄漏?

问题描述

我正在按照本教程 https://www.codeproject.com/Articles/523417/Reflection-with-IDispatch-based-COM-objects支持 Idispatch 接口的 COM 对象获取类型信息。一切正常,但是我遇到了内存泄漏。例如,如果我从 Type 方法获得托管的 GetTypeInfo 对象 100 次,我会得到 150mb 的分配但未释放。

如果我手动做 TypetoTypeInfoMarshaler 所做的相同的事情,即从 IntPtr 方法GetTypeInfo 接口)获取 ITypeInfo,在此调用 Marshal.GetTypeForITypeInfo IntPtr 然后使用 Marshal.Release 释放它我得到了相同的行为(内存泄漏)。奇怪的是,Marshal.Release 返回 3,因此此时还有 3 个引用指向实现 ITypeInfo 接口的对象。如果我对它执行 Marshal.Release 直到引用计数变为 0,我的程序就会崩溃。

我不太明白这个。谁拥有这 3 个参考文献?也许托管 Type 对象在 ITypeInfo 接口上有一个引用,它永远不会被 GC 或其他东西清除。有什么办法可以解决这个问题吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)