COMとdynamicとMarshal.ReleaseComObjectと

さて、今までの記事で「楽するため」と称してC#4.0の"dynamic"キーワードを使ってCOMを使った処理をこんな風に書いてきたわけですが、

            // Shell.Applicationオブジェクトの作成
            dynamic shellApplication = Activator.CreateInstance(Type.GetTypeFromProgID("Shell.Application"));
...
            shellApplication = null;

ふと「Marshal.ReleaseComObject()はホントに不要でいいのか」と思っていろいろ調べたら衝撃の事実が…

これらの記事の内容をまとめると、

  • C#4.0のdynamicを使ったからといってCOMの解放まで不要になったわけじゃない
  • だけどMarshal.ReleaseComObject()の不用意な呼び出しは危険だから極力するな

うーむ、自分のような凡人の頭では「で、どうすりゃいいの?」です(^^;;