正在使用内部使用COM dll的.Net Windows应用程序。 在以下4种释放COM对象的方法中,哪种方法最好?
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;
}
感谢阅读。
答案 0 :(得分:2)
5。让GC做到。
除非COM组件持有您需要的重要资源,否则哪个很好。
如果您的方法基于检查obj != null
,那么将obj
设置为null
是个好主意,除非您确定不会多次调用此代码。
最佳方式:需要有关应用程序实施的更多详细信息,以便在使用ReleaseComObject
和FinalReleaseComObject
之间提供具体建议,但最理想的答案是既不
答案 1 :(得分:2)
要么让GC像Richard建议的那样处理它,要么就是你的号码2.如果你调用FinalReleaseComObject
,你将销毁运行时可调用包装器,无论它是否已经找到了代码的其他部分。好。这可能会严重混淆代码的其他部分。因此,每次跨越.NET-land-from-COM过渡时,您应该只调用ReleaseComObject
一次。