다음을 통해 공유


.NET 개체 할당 도구를 사용하여 메모리 사용량 분석

.NET 개체 할당 도구를 사용하여 앱에서 사용하는 메모리 양과 가장 많은 메모리를 할당하는 코드 경로를 확인할 수 있습니다.

도구를 실행한 후 개체가 할당되는 함수 실행 경로를 볼 수 있습니다. 그런 다음 가장 많은 메모리를 차지하는 호출 트리의 루트로 다시 추적할 수 있습니다.

.NET 개체 할당 도구를 사용하여 성능을 향상시키는 방법을 보여 주는 자습서는 사례 연구: 코드최적화에 대한 초보자 가이드를 참조하세요.

설치

  1. Visual Studio 프로젝트에서 솔루션 구성을 릴리스 로 설정하고 배포 대상을 선택합니다.

    배포 대상은 일반적으로 프로젝트 이름과 일치하며, 이는 로컬 배포를 나타냅니다.

    배포 대상은 일반적으로 로컬 Windows 디버거 (또는 로컬 컴퓨터)입니다.

  2. Alt+F2 선택하여 Visual Studio에서 성능 프로파일러를 엽니다.

  3. .NET 개체 할당 추적 확인란을 선택합니다.

    선택된 Dotnet 개체 할당 추적 도구의 스크린샷.

    선택된 Dotnet 개체 할당 추적 도구의 스크린샷.

  4. 시작 단추를 선택하여 도구를 실행합니다.

    프로파일러를 시작하기 전에 컬렉션 일시 중지 옵션을 사용하도록 설정하면 진단 세션 보기에서 레코드 단추를 선택할 때까지 데이터가 수집되지 않습니다.

  5. 도구가 실행되기 시작한 후 앱에서 프로파일을 지정할 시나리오를 진행합니다. 그런 다음 컬렉션 중지를 선택하거나 앱을 닫아 데이터를 확인합니다.

    컬렉션 중지를 보여주는 창의 스크린샷

    컬렉션 중지를 보여주는 창의 스크린샷

  6. 할당 탭을 선택합니다. 다음과 유사한 메모리 할당 데이터가 나타납니다.

    할당 탭의 스크린샷.

    할당 탭의 스크린샷.

이제 개체의 메모리 할당을 분석할 수 있습니다.

수집 중에 추적 도구는 프로파일된 앱의 속도를 늦출 수 있습니다. 추적 도구 또는 앱의 성능이 느리고 모든 개체를 추적할 필요가 없는 경우 샘플링 속도를 조정할 수 있습니다. 이렇게 하려면 프로파일러 요약 페이지에서 추적 도구 옆에 있는 기어 기호를 선택합니다.

Dotnet 할당 도구 설정 스크린샷

Dotnet 할당 도구 설정 스크린샷

샘플링 속도를 원하는 속도로 조정합니다. 이러한 변경은 수집 및 분석 중에 앱의 성능을 향상하는 데 도움이 됩니다.

조정된 샘플링 속도의 스크린샷

조정된 샘플링 속도의 스크린샷

도구를 보다 효율적으로 만드는 방법에 대한 자세한 내용은 프로파일러 설정 최적화 참조하세요.

데이터 이해

다음 그래픽 보기에서 위쪽 그래프는 앱의 라이브 개체 수를 보여 줍니다. 아래쪽 Object 델타 그래프는 앱 개체의 백분율 변경률을 보여 있습니다. 빨간색 막대는 가비지 수집이 이루어졌을 때를 나타냅니다.

Dotnet 할당 도구에 대한 그래프의 스크린샷 에 대한 그래프

Dotnet 할당 도구에 대한 그래프의 스크린샷 에 대한 그래프

시간 범위를 선택하여 테이블 형식 데이터를 필터링하여 지정된 시간 범위의 작업만 표시할 수 있습니다. 이렇게 하면 탭에 표시되는 정보가 필터링된 시간 범위로 범위가 지정됩니다.

Dotnet 할당 시간의 필터링된 그래프의 스크린샷

Dotnet 할당 시간의 필터링된 그래프의 스크린샷

그래프를 확대하거나 축소할 수도 있습니다.

인사이트

인사이트 보기에 인사이트가 표시되면 제공된 링크를 사용하여 식별된 문제에 대한 자세한 정보를 가져옵니다. 또한 코필로트를 사용하는 경우 코필로트 요청 단추가 코필로 채팅 창을 열고, 코필로트는 코드 및 식별된 문제에 따라 제안을 제공합니다.

할당

할당 보기에는 메모리를 할당하는 개체의 위치와 해당 개체가 할당하는 메모리의 양이 표시됩니다.

확장된 할당 보기 스크린샷

확장된 할당 보기 스크린샷

할당 보기에 다음 정보가 표시됩니다.

  • 형식 열은 메모리를 사용하는 클래스 및 구조의 목록입니다. 타입을 두 번 클릭하여 백트레이스를 반전된 호출 트리 형태로 확인합니다. 할당 보기에서만 선택한 범주 내에서 메모리를 사용하는 항목을 볼 수 있습니다.

  • 할당 열에는 특정 할당 유형 또는 함수 내에서 메모리를 사용하는 개체 수가 표시됩니다. 이 열은 할당, 호출 트리함수 보기에만 나타납니다.

  • 바이트평균 크기(바이트) 열은 기본적으로 표시되지 않습니다. 표시하려면 형식 또는 할당 열을 마우스 오른쪽 단추로 클릭한 다음 바이트평균 크기(바이트) 옵션을 선택하여 차트에 추가합니다.

    두 열은 Total(할당)자체(할당)유사합니다. 단, 메모리를 차지하는 개체 수 대신 사용된 메모리 양을 표시합니다. 이러한 열은 할당 보기에만 나타납니다.

  • 모듈 이름 열에는 호출하는 함수 또는 프로세스가 포함된 모듈이 표시됩니다.

이러한 열은 모두 정렬할 수 있습니다. 형식모듈 이름 열의 경우 항목을 사전순으로 오름차순 또는 내림차순으로 정렬할 수 있습니다. 할당, 바이트평균 크기(바이트)경우 숫자 값을 늘리거나 줄여 항목을 정렬할 수 있습니다.

기호

다음 기호는 할당, 호출 트리함수 탭에 표시됩니다.

  • 값 형식 기호 - 정수와 같은 값 형식

  • 값 형식 컬렉션 기호 - 정수 배열과 같은 값 형식 컬렉션

  • 참조 형식 기호 - 문자열과 같은 참조 형식

  • 참조 형식 컬렉션 기호 - 문자열 배열과 같은 참조 형식 컬렉션

호출 트리

호출 트리 보기에는 많은 메모리를 할당하는 개체가 포함된 함수 실행 경로가 표시됩니다.

호출 트리 보기의 스크린샷

호출 트리 보기의 스크린샷

호출 트리 보기에 다음 정보가 표시됩니다.

  • 함수 이름 열에는 메모리를 할당하는 개체가 포함된 함수의 프로세스 또는 이름이 표시됩니다. 표시는 검사하는 노드의 수준을 기반으로 합니다.
  • Total(할당)총 크기(바이트) 열에는 할당된 개체 수와 함수에서 사용하는 메모리 양과 호출하는 다른 모든 함수가 표시됩니다. 총 크기(바이트) 열은 기본적으로 숨겨집니다.
  • Self(할당)Self-Size(바이트) 열에는 할당된 개체 수와 선택한 단일 함수 또는 할당 형식에서 사용되는 메모리 양이 표시됩니다.
  • 평균 크기(바이트) 열은 할당 보기에서와 동일한 정보를 표시합니다. 이 열은 기본적으로 숨겨집니다.
  • 모듈 이름 열에는 호출하는 함수 또는 프로세스가 포함된 모듈이 표시됩니다.

호출 트리 보기에 표시되는 추가 옵션은 다음과 같습니다.

  • 핫 경로 확장 단추는 메모리를 할당하는 많은 개체가 포함된 함수 실행 경로를 강조 표시합니다. 알고리즘은 선택한 노드에서 시작하여 가장 많은 할당 경로를 강조 표시하여 조사를 안내합니다.
  • 핫 경로 표시 단추는 핫 경로의 일부인 노드를 나타내는 불꽃 기호를 표시하거나 숨깁니다.

확장된 핫 패스의 스크린샷

확장된 핫 패스의 스크린샷

기능

함수 보기에는 메모리를 할당하는 프로세스, 모듈 및 함수가 표시됩니다.

함수 보기의 스크린샷.함수 보기

함수 보기의 스크린샷.함수 보기

함수 보기에 표시되는 정보에는 다음이 포함됩니다.

  • 이름 열은 프로세스를 가장 높은 수준의 노드로 표시합니다. 프로세스 아래에는 모듈이 있으며, 그 아래에는 함수가 있습니다.

  • 다음 열은 할당호출 트리 보기에서와 동일한 정보를 표시합니다.

    • 합계(할당)
    • 자체(할당)
    • 총 크기(바이트)
    • 자체 크기(바이트)
    • 평균 크기(바이트)

수집

컬렉션 보기는 가비지 수집 중에 수집되거나 보존된 개체 수를 보여줍니다.

컬렉션 보기의 스크린샷입니다.

컬렉션 보기의 스크린샷입니다.

컬렉션 보기에 다음 정보가 표시됩니다.

  • GC 열은 실행 파일 수명 기간의 이 가비지 수집 식별자를 표시합니다.
  • 세대 열에는 가비지 수집의 세대가 표시됩니다.
  • GC 형식 열에는 이 가비지 수집의 형식이 표시됩니다.
  • GC 이유 열에는 이 가비지 수집 이벤트의 이유가 표시됩니다.
  • 일시 중지 기간 열에는 가비지 수집기에서 힙을 단독으로 사용해야 하므로 실행이 차단된 시간이 표시됩니다. 백그라운드 가비지 수집의 경우 이 값은 작습니다.
  • LOH 크기 열에는 가비지 수집기가 실행된 후의 큰 개체 힙 크기가 표시됩니다.
  • POH 크기 열에는 가비지 컬렉터 실행 후 고정 객체 힙의 크기가 표시됩니다.
  • Finalizable Surv(MB) 열에는 가비지 수집에서 살아남은 종료자(소멸자)가 있는 개체의 MB 수가 표시됩니다.
  • 고정된 개체 열에는 이 가비지 수집이 참조된 고정된 개체의 수가 표시됩니다.
  • 수집된 열에는 가비지 수집기가 수집한 개체 수가 표시됩니다.
  • 가비지 수집기가 실행된 후에 살아남은 개체 수가 Survived 열에 표시됩니다.

행을 선택하면 이 보기에는 수집된 개체와 남은 개체를 형식별로 시각화하는 원형 차트도 표시됩니다.

컬렉션 보기의 원형 차트 스크린샷. 컬렉션 뷰

필터링 도구

할당, 호출 트리, 및 함수 보기 모두에는 내 코드만 표시네이티브 코드 표시 옵션과 필터 상자가 포함되어 있습니다.

  • 내 코드만 표시 시스템, 프레임워크 및 기타 비사용자 코드를 [외부 코드] 프레임으로 축소하여 코드에만 집중할 수 있습니다. 자세한 내용은 내 코드사용하여 사용자 코드 디버그를 참조하세요.
  • 네이티브 코드 표시 분석 대상 내에 네이티브 코드를 표시하고 비사용자 코드를 포함할 수 있습니다.
  • 필터 상자를 사용하면 제공된 값에 따라 이름 또는 함수 이름 열을 필터링할 수 있습니다. 상자에 문자열 값을 입력합니다. 그런 다음 테이블에는 해당 문자열이 포함된 형식만 표시됩니다.