清理.net应用程序中COM对象的最佳方法

时间:2010-09-06 10:53:54

标签: com interop

正在使用内部使用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;
                }

感谢阅读。

2 个答案:

答案 0 :(得分:2)

5。让GC做到。

除非COM组件持有您需要的重要资源,否则哪个很好。


如果您的方法基于检查obj != null,那么将obj设置为null是个好主意,除非您确定不会多次调用此代码。

最佳方式:需要有关应用程序实施的更多详细信息,以便在使用ReleaseComObjectFinalReleaseComObject之间提供具体建议,但最理想的答案是既不

答案 1 :(得分:2)

要么让GC像Richard建议的那样处理它,要么就是你的号码2.如果你调用FinalReleaseComObject,你将销毁运行时可调用包装器,无论它是否已经找到了代码的其他部分。好。这可能会严重混淆代码的其他部分。因此,每次跨越.NET-land-from-COM过渡时,您应该只调用ReleaseComObject一次。