释放COM对象

apo*_*pse 5 c# com

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

Joe*_*Joe 3

Marshal.ReleaseComObject这当然不会自动完成,并且在某些情况下(通过调用)这样做可能很危险,如本博客文章中所述

对于进程内 COM 对象,通常根本不需要释放 COM 对象。

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

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

如果您以范围内的单线程方式使用 COM 对象,那么在使用完该对象后,您可以安全地对该对象调用 ReleaseComObject。

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