Am working on a .Net windows application which internally uses a COM dll.
Out of the following 4 ways of releasing a COM object, which is the best one?
1.
if (obj != null)
{
Marshal.ReleaseComObject(obj);
}
2.
if (obj != null)
{
Marshal.ReleaseComObject(obj);
obj=null;
}
3.if (obj != null)
{
Marshal.FinalReleaseComObject(obj);
}
4.if (obj != null)
{
Marshal.FinalReleaseComObject(obj);
obj=null;
}
Thanks for reading.
Either just let the GC deal with it as Richard suggested, or your number 2. If you call
FinalReleaseComObject, you will destroy the runtime callable wrapper, regardless if it’s found its way to other parts of your code as well. This could seriously confuse other parts of your code. So you should only callReleaseComObjectonce per crossing-into-.NET-land-from-COM transition.