KB0203: マネージド コード (C#、Visual Basic、.NET) から Office Automation を使用する方法
問題
Office は COM を使用してオートメーション オブジェクトを公開します。C# や Visual Basic で使用されるマネージド コードでは、COM オブジェクトは Runtime Callable Wrappers (RCW) でラップされます。プログラマーが特別な処理を行わない場合、RCW でラップされた COM オブジェクトはガベージ コレクション時にのみ解放されますが、メモリ負荷がない場合には解放されないことがあります。
解決策
COM オブジェクトを確実に解放するには、Office から受け取ったすべてのオブジェクトについて、使用後に System.Runtime.InteropServices.Marshal.ReleaseComObject で解放してください。
注記
-
System.Runtime.InteropServices.Marshal.FinalReleaseComObject は使用しないでください。他のマネージド アドインがまだ使用している場合でも COM オブジェクトを解放してしまうためです。
-
別のオブジェクトを経由してオブジェクトにアクセスしないでください。例:
// C# // 誤り PowerPoint.View view = Application.ActiveWindow.View;' Visual Basic ' 誤り Dim view As PowerPoint.View = Application.ActiveWindow.Viewこの場合、ActiveWindow によって一時的な PowerPoint.DocumentWindow が作成されますが、解放されません。
代わりに、変数に代入してから解放します。
// C# PowerPoint.DocumentWindow wnd = Application.ActiveWindow; PowerPoint.View view = wnd.View; System.Runtime.InteropServices.Marshal.ReleaseComObject(wnd); System.Runtime.InteropServices.Marshal.ReleaseComObject(view);' Visual Basic Dim wnd As PowerPoint.DocumentWindow = Application.ActiveWindow Dim view As PowerPoint.View = wnd.View System.Runtime.InteropServices.Marshal.ReleaseComObject(wnd) System.Runtime.InteropServices.Marshal.ReleaseComObject(view)