8

Microsoft Office アドインでは、イベントで COM オブジェクトが渡されます。具体的な例を挙げると、Word がドキュメントを開くと、呼び出されて Document オブジェクトが渡されます。では、いつ Marshal.ReleaseComObject() を呼び出す必要があるのでしょうか?

  1. Document オブジェクトにアクセスする場合、リリースを呼び出す必要がありますか? それとも、Word が既にアクセスしてクリーンアップすると仮定できますか?
  2. Document.Name にアクセスすると、文字列が返されます。文字列は COM オブジェクトではないため、クリーンアップする必要はありません。よろしいですか?
  3. しかし、COM オブジェクト (メンバー メソッド/関数によって返される任意のクラス) をラップするクラスを返すメンバーにアクセスする場合は、その上で release を呼び出す必要があります - 正しいですか?

また、リリースを逃した場合はどうなりますか? IDisposable が実装されたクラスにラップする不確定な時間保持する COM オブジェクト。完了したら Dispose() を呼び出します。しかし、これを処理するコードの一部は複雑であり、Dispose を呼び出さない場合が時折あると思います。

これらのオブジェクトのすべての単一インスタンスにオーバーヘッドを追加するファイナライザーを使用する方がよいでしょうか (大量に!)? それとも、決して解放されない少数の Word COM オブジェクトでよいのでしょうか?

ありがとう - デイブ

4

1 に答える 1