답변:
가장 주목할만한 것은, 커서 로 작업을 마치면 항상 명시 적으로 커서를 놓는 것입니다. 또한 예를 들어 데이터베이스 액세스를 암시하는 몇 가지 열거 개체 해제 IEnumRelationship 당신이에서 얻을 IRelationshipClass.GetRelationshipsForObject을 .
또한 수명이 짧은 (특히 타이트한 루프에서) 많은 COM 인스턴스를 만들 때는 명시 적으로 해제하는 것이 좋습니다.
개별 기능 (행) 참조를 해제하는 것이 좋습니다 시나리오도 있습니다. 예를 들어, 새로운 지오 데이터베이스 버전, 데이터 편집, 조정 및 게시를 생성 한 경우 릴리스되지 않은 행이있을 수 있으므로 이후 버전을 삭제하려는 시도가 실패 할 수 있으며, 이로 인해 삭제하려는 버전 (작업 영역)이 계속 유지됩니다. 그러나 대부분 이러한 시나리오는 드물며 일상적인 ArcObjects 개발에서이를 설명 할 필요는 없습니다. 불필요한 정리만으로 코드가 복잡해져 유지 관리가 쉽지 않습니다.
.NET 랩퍼를 해제하지 말아야 할 때도 언급해야 합니다. 다른 관리 코드에서 사용중인 ArcObject의 RCW를 명시 적으로 해제 하지 마십시오 . 이것의 한 가지 예-ArcMap에있을 때 IMap을 해제하지 마십시오. 일반적으로 생성하지 않은 ArcObject를 해제하지 마십시오.
항상 파괴하십시오 :
다른 곳에서 사용중인 것을 파괴하지 않도록주의하십시오.
오늘 저는 Kirk가 참여한 ESRI 웹 사이트에서 흥미로운 토론을 읽었습니다. ReleaseComObject 메소드 및 FinalReleaseComObject (또는 이와 유사한 것) 사용과 같은 다른 흥미로운 의견이있었습니다. 죄송합니다. 현재 링크가 없습니다.
일부는 IRows 릴리스를 제안했지만 GC에서 직접 처리하는 것이 더 쉽다는 데 동의했습니다.
나는 어떤 IGeometry도 해제하지 않습니다. 아무도 그것을 시도?
ESRI.ArcGIS.ADF.ComReleaser를 사용하겠습니다. 즉, 결정적인 릴리스 패턴을 사용하는 아크 객체는 정확히 확실하지 않지만 가장 중요하기 때문에 주로 IServerContext 객체에 부착합니다.
using (ComReleaser comReleaser = new ComReleaser())
{
}
2011 esri 개발자 서밋에서 얻을 수있는 정보는 다음과 같습니다.
내가 기억하는 큰 목록은 싱글 톤 객체 (도움말의 두 가지 주제)에 대한 것입니다.
이것은 .NET "COM 참조 릴리스"주제에서 ArcObject를 사용하기위한 우수 사례의 링크입니다. 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 평생 커서 —in..net.aspx