다음을 통해 공유


메모리 사용량 도구에서 루트까지의 주요 경로를 분석하기

Visual Studio의 메모리 사용량 프로파일링 도구에서 .NET 코드를 프로파일링할 때 루트 대한 핫 경로는 메모리 사용 문제를 일으키는 힙에 유지되는 개체를 식별하는 데 도움이 될 수 있습니다. 메모리 사용 컨텍스트에서 핫 경로는 잠재적인 메모리 문제의 원인인 루트 개체를 가리키는 프로파일러에 의해 식별되는 참조 체인입니다.

개체의 포괄 크기(개체를 활성 상태로 유지하여 힙에 유지되는 총 메모리 양)를 계산할 때 강력한 연결 힙 그래프를 트리로 줄이는 것이 도움이 되는 경우가 많습니다. 그래프와 달리 트리의 노드에는 임의로 많은 자식이 있지만 한 부모만 있습니다. 개체에 대해 가능한 모든 루트 경로를 고려하는 대신 다양한 추론을 사용하여 루트에 대한 가장 가능성이 큰 경로를 선택하는 것은 일반적으로 개체를 가비지 수집에 적합하게 만드는 참조 체인을 찾기에 충분합니다. 이러한 추론 중 일부에는 루트에 대한 가장 짧은 경로, 특정 루트 형식 및 사용자 코드 경로의 우선 순위를 지정하는 것이 포함됩니다. 다양한 이유로 이 전략은 항상 가장 흥미롭거나 가장 오래 지속되는 보존 체인을 찾지는 못하지만 메모리 사용량 조사에서 유용한 시작점을 제공하는 경우가 많습니다.

메모리 사용 도구의 루트 트리에 대한 경로에서 불꽃 아이콘이 있는 경로(활성 경로 아이콘을 보여 주는 스크린샷.)를 루트의 핫 경로라고 합니다.

예시

경로만 표시 옵션을 사용하여 루트 경로 창에서 보기를 필터링합니다.

이 예제에서는 궁극적으로 AutomationPeer의해 루팅되는 바인딩을 통해 WPF 컨트롤(AttachToProcess.Dialog)이 유출됩니다. 필터링된 보기에서 보존 경로는 분명합니다. 루트에 대한 직접 경로만 표시됩니다.

루트 경로 그래프의 스크린샷입니다. 핫 경로만 표시하도록 선택되어 있으며, 선형 참조 체인이 강조 표시되어 있습니다.

옵션을 사용하지 않도록 설정하면 수백 개의 바인딩이 있으며 대부분의 확장 경로는 해당 주기의 막다른 길로 이어진다는 것이 분명해집니다. 시각적 표시기가 없으면 수천 개의 잠재적 보존 경로를 정렬하여 누출의 후보 이유를 찾는 것이 지루합니다. 루트 참조 그래프의 동일한 경로 스크린샷입니다. '핫 경로만 표시'가 선택 해제되어 여러 가능한 데드 엔드가 보입니다.

참고:

Visual Studio 메모리 사용량 도구에 대한 자세한 내용은

  • 디버거 사용하여 메모리 사용량 분석
  • 디버거 없이 메모리 사용량 분석