我在Visual Studio项目中向一些COM库添加了一个引用。现在,当我在一个方法中创建和对象时,当程序离开该方法时,这个COM对象会自动释放吗?或者我应该总是手动释放这些对象吗? (ReleaseComObject或FinalReleaseComObject?)。
答案 0 :(得分:3)
肯定不会自动完成,在某些情况下这样做会很危险(通过致电Marshal.ReleaseComObject
)as described in this blog post。
对于In-Proc COM对象,通常根本不需要释放COM对象。
对于Out-Proc COM对象,释放它们非常重要,以防止Office apps failing to shut down after automation from a .NET client等问题。
在这种情况下,我会按照上述链接博客文章中的建议进行操作:
如果您以作用域,单线程方式使用COM对象,则可以在完成后对该对象安全地调用ReleaseComObject。
但是如果您在应用程序中(或在同一进程中的其他应用程序中)使用来自多个位置或多个线程的COM对象,则不应调用ReleaseComObject
答案 1 :(得分:2)
您可以使用Marshal.ReleaseComObject: http://msdn.microsoft.com/de-de/library/system.runtime.interopservices.marshal.releasecomobject.aspx