Visual Studio プロジェクトの参照をいくつかの COM ライブラリに追加しました。メソッドでオブジェクトを作成すると、プログラムがそのメソッドを離れたときに、この COM オブジェクトは自動的に解放されますか? それとも、これらのオブジェクトを常に手動でリリースする必要がありますか? (ReleaseComObject または FinalReleaseComObject?)。
2 に答える
これは確かに自動的に行われるわけではなく、場合によっては、このブログ投稿 で説明されているMarshal.ReleaseComObject
ように (を呼び出して)行うのが危険な場合があります。
In-Proc COM オブジェクトの場合、多くの場合、COM オブジェクトをまったく解放する必要はありません。
Out-Proc COM オブジェクトの場合、.NET クライアントからの自動化後に Office アプリがシャットダウンに失敗するなどの問題を防ぐために、それらを解放することが重要になる場合があります。
この場合、上記のリンク先のブログ投稿のアドバイスに従います。
COM オブジェクトをスコープ付きのシングル スレッド方式で使用している場合は、使用が終わったら、そのオブジェクトで ReleaseComObject を安全に呼び出すことができます。
ただし、アプリケーション内の複数の場所または複数のスレッドから (または同じプロセス内の他のアプリケーションから) COM オブジェクトを使用している場合は、ReleaseComObject を呼び出さないでください。
Marshal.ReleaseComObject を使用できます: http://msdn.microsoft.com/de-de/library/system.runtime.interopservices.marshal.releasecomobject.aspx