, 그것은 일반적으로 예를 들어, 원인 코드가 올바르게 모든 COM 인스턴스에서 Marshal.ReleaseCOMObject
을 호출하지 않는 경우 Word/Outlook 프로세스가 메모리에 정지합니다. Outlook 2007에서는 Outlook addins에 대해 부분적으로이 문제가 해결되었지만 이는 일반적인 질문입니다.관리되지 않는 COM 참조를 관리되는 코드에서 디버깅하는 방법?
(유형별) COM 참조 적어도 목록을 표시 할 수있는 도구가 있습니까 관리 코드 보유? 이상적으로는 참조 증가가 발생한 곳을 디버깅하는 데 도움이되는 메모리 프로파일 러 스타일의 객체 트리도 표시합니다.
런타임시 디버깅은 정지 된 프로세스에 연결할 수있는만큼 중요하지 않습니다. 일반적으로 문제는 COM 인터페이스로 코드를 완료하고 누군가가 코드를 릴리스하는 것을 잊어 버렸기 때문에 발생합니다 (예 : Winword). 호출 된 관리 응용 프로그램이 종료 된 후에도 메모리가 손실됩니다.
같은 도구가 존재하지 않는 경우 (기술?) 이유는 무엇인가? COM interop을 사용하여 작업 할 때 많은 문제를 찾기가 매우 어려울 경우 매우 유용합니다.
전혀 걸림의 원인 예를 들어, "기차"속성 액세스가 발표 될 각 인스턴스를 필요로하는 열거를 사용하거나 잊어 예를 들어 때 도움이되지 않음 document.Sections [0] .Ranges [0] .Text. – Marek
나는 그것이 당신이 찾고있는만큼 깨끗하지 않거나 간단하지 않다는 것을 인정한다. 하지만 AddRef에와 릴리스로 서브 루틴을 만들고, 반환 값을보고하고, 이전과 객체의 모든 사용 후이라고하면 (또는 의심 그냥 사람, 노력을 줄이기 위해), 당신은 더 좋아질 것 무슨 일이 일어나고 있는지 그림. 예를 들어, 열거자를 사용하기 전후에이 작업을 수행 한 경우 해당 코드의 내용에서 참조를 남기고 있는지 확인할 수 있습니다. –