기본 라이브러리 통화로 인해 관리 코드가 메모리가 유출되는지 어떻게 알 수 있습니까?

StackOverflow https://stackoverflow.com/questions/244489

문제

기본 라이브러리로 전화하는 관리 DLL이 있습니다. 이 기본 라이브러리는 일반적으로 intptrs를 반환합니다. 이것들은 기본 라이브러리의 다른 방법으로 전달하여 일을 수행하거나 Library에 IntPTR과 관련된 인스턴스를 풀어달라고 지시 할 수 있습니다. 그러나 일부 인스턴스만이 이런 식으로 해방해야하며 다른 경우는 라이브러리에서 관리합니다. 문제는 문서가 어떤 인스턴스가 해제되어야하는지에 대해 항상 명확하지 않다는 것입니다.

내가 알고 싶은 것은 내 코드가 해제되어야 할 포인터에 대한 참조를 유지했는지 알 수있는 방법이 있는지 여부는 메모리가 누출되도록하는 것입니까?

도움이 되었습니까?

해결책

가장 쉬운 방법은 아마도 메모리 프로파일 러를 사용하는 것입니다. 빠른 Google은 링크를 나타 냈습니다 memprofiler. 나는 이것을 한 번 (시험으로) 사용했고 디렉토리 엔트리를 제대로 처분하지 않은 곳을 찾을 수있었습니다. 나는 이것을 포함하여 다른 사람들이 있다고 확신합니다 하나 Redgate에 의해.

다른 팁

나는 WindBG를 사용합니다 (사용 가능합니다 여기). 명령 줄 중심이지만 많은 좋은 보고서를 제공합니다. 스택 정보, 객체 수 및 촬영 크기가 포함됩니다 (이는 폐기되지 않은 항목을 가리킬 수 있습니다).

메모리 및 핸들 누출에 대한 특정보고가있는 디버그 진단 도구도 있습니다. 그것의 여기

사용을 고려하고 싶을 수도 있습니다 금고 기본 코드에서 반환 된 핸들을 랩핑합니다. intptr에 대한 추가 값을 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top