回答:
最も注目すべきは、カーソルを使い終わったら、常に明示的にカーソルを解放することです。IRelationshipClass.GetRelationshipsForObjectから取得するIEnumRelationshipなど、データベースアクセスを暗示するいくつかの列挙オブジェクトもリリースします。
また、短命(特にタイトループ)の多くのCOMインスタンスを作成する場合は、それらを明示的にリリースすることもお勧めします。
個々の機能(行)参照をリリースすることが推奨されるシナリオもあります。たとえば、新しいジオデータベースバージョンを作成し、データの編集、調整および投稿を行った場合、未リリースの行が存在する可能性があるため、バージョンを削除しようとすると失敗する可能性があります。ただし、ほとんどの場合、このようなシナリオはまれであり、日常のArcObjects開発でそれらを考慮する必要はありません。余分なクリーンアップでコードが乱雑になるだけで、保守性が低下します。
-ないときは、リリースの.NETラッパーに言うことも重要である決して明示的に他のマネージコードで使用されているかもしれないのArcObjectsのRCWを解放しません。この一例-ArcMapではIMapをリリースしないでください。一般に、作成しなかったArcObjectsをリリースしようとしないでください。
ほとんどの場合、.NETガベージコレクションはうまく機能します。ArcObjectsには、デストラクターで重要な作業を行うケースがいくつかあり、.NETラッパーの非決定的な性質が問題を引き起こす可能性があります。このヘルプトピックでは、懸念される主なケースとリリースの管理方法について説明します。
常に破壊する:
他の場所で使用されているものを破壊しないように注意してください。
今日、カークが参加したESRIのWebサイトで興味深い議論を読みました。ReleaseComObjectメソッドやFinalReleaseComObject(など)の使用など、他の非常に興味深い意見がありました。申し訳ありませんが、今はリンクがありません。
IRowsをリリースすることを提案する人もいましたが、多くの人が、GCに直接それらを処理させる方が簡単だということに同意しました。
IGeometryをリリースすることはありません。誰もがそれを試しましたか?
ESRI.ArcGIS.ADF.ComReleaserを使用します。とはいえ、どのアークオブジェクトが確定的なリリースパターンを使用しているかは正確にはわかりませんが、それが最も重要であるため、主にIServerContextオブジェクトにアタッチします。
using (ComReleaser comReleaser = new ComReleaser())
{
}
これは、2011年のesri開発者サミットで入手できた情報です。
私が覚えていた大きなリストは、シングルトンオブジェクトに関するものでした(ヘルプでは2つのトピックがあります)。
これは、.NETでArcObjectsを使用するためのベストプラクティスの「COM参照のリリース」トピックからのリンクです。http: //help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Releasing_COM_references/0001000004tm000000/
そして、ここではオブジェクトのリストが含まれていない4メートルの議論にジオブログ上のポストがある: http://blogs.esri.com/dev/blogs/geodatabase/archive/2010/05/18/what_2700_s-up-with ‑comreleaser_3f00_.aspx
(最後に、URLが機能しなかった場合に役立つリンクを含むブログ投稿) http://blogs.esri.com/dev/blogs/geodatabase/archive/2008/12/18/using‑the‑comreleaser‑to‑manage ‑the‑lifetime‑of‑cursors‑in‑.net.aspx