问题描述
我正在按照本教程 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 (将#修改为@)