2012-09-26 152 views
5

我在Visual Studio項目中添加了一個引用到一些COM庫。現在當我在一個方法中創建和對象時,當程序離開這個方法時,這個COM對象會自動釋放嗎?或者我應該總是手動釋放這些對象? (ReleaseComObject或FinalReleaseComObject?)。發佈COM對象

+1

有更多關於這個[這裏] (http://stackoverflow.com/questions/1827059/why-use-finalreleasecomobject-instead-of-releasecomobject) – StuartLC

+1

備用一些時間來調查,並耐心,因爲文章都是艱難和無聊,如http:// blogs.msdn.com/b/visualstudio/archive/2010/03/01/marshal-releasecomobject-considered-dangerous.aspx –

回答

3

它肯定不是自動完成的,而且在某些情況下,它可能是危險這樣做(通過調用Marshal.ReleaseComObjectas 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的