У меня есть следующая функция в COM dll (C #, .NET Framework 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) {}
, но тоже не повезло.