5

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

4

2 回答 2

3

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

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

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

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

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

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

于 2012-09-26T07:19:32.523 回答
2

您可以使用 Marshal.ReleaseComObject:http: //msdn.microsoft.com/de-de/library/system.runtime.interopservices.marshal.releasecomobject.aspx

于 2012-09-26T07:14:50.343 回答