【发布时间】:2010-10-17 22:40:44
【问题描述】:
我在 COM dll(C#、.NET 框架 v2)中有以下功能:
public void Leak(object jsObject) {
Type comType;
IDispatch disp = (IDispatch)jsObject;
disp.GetTypeInfo(0, 0, out comType); // this line causes the leak
Marshal.FinalReleaseComObject(disp);
Marshal.FinalReleaseComObject(jsObject);
disp = null;
jsObject = null;
GC.Collect(); GC.WaitForPendingFinalizers();
}
从 JScript 中重复调用此函数时,会泄漏大量内存:
var util = new ActiveXObject('MyLeakyCOM.MyLeakyCOM');
for(var i = 0; i < 1000; i++) {
util.Leak({});
}
我已经尝试使用while(Marshal.ReleaseComObject(disp) > 0) {} 释放对象,但也没有成功。
【问题讨论】:
标签: c# com memory-leaks interop managed