释放COM对象

5
我在Visual Studio项目中添加了对某个COM库的引用。现在,当我在方法中创建对象时,这个COM对象是否会自动在程序离开该方法时释放?或者我应该始终手动释放这些对象?(使用ReleaseComObject或FinalReleaseComObject?)

1
这里有更多相关内容:https://dev59.com/lHI-5IYBdhLWcg3wfoa1 - StuartLC
1
抽出一些时间来进行调查,并且要有耐心,因为这些文章都很艰深而枯燥,比如http://blogs.msdn.com/b/visualstudio/archive/2010/03/01/marshal-releasecomobject-considered-dangerous.aspx。 - Lex Li
2个回答

3

这绝对不是自动完成的,有些情况下这样做可能是危险的(通过调用Marshal.ReleaseComObject),如此博客文章所述。

对于In-Proc COM对象,通常根本不需要释放COM对象。

对于Out-Proc COM对象,释放它们可能很重要,以防止出现问题,例如Office应用程序在.NET客户端自动化后无法关闭

在这种情况下,我会遵循上面链接的博客文章中的建议:

如果您以作用域、单线程方式使用COM对象,则可以在使用完毕后安全地调用ReleaseComObject。

但是,如果您从应用程序的多个位置或多个线程(或同一进程中的其他应用程序)使用COM对象,则不应调用ReleaseComObject。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接