Если используется COM-взаимодействие, используйте Marshal.ReleaseComObject после того, как вы закончили с COM-объектом, чтобы освободить Runtime Callable Wrapper (RCW).
Кроме того, если ваш COM-объект имеет свойство или метод, который возвращает другой COM-объект, позаботьтесь о том, чтобы всегда присваивать его переменной и впоследствии освобождать.
т.е. это приведет к утечке объекта, полученного GetFirstChild:
string name = myBigComObject.GetFirstChild().Name;
Использование istead:
ChildComObject firstChild = myBigComObject.GetFirstChild()
string name = firstChild.Name;
Marshal.ReleaseComObject(firstChild);