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

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

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

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

설정

  1. Visual Studio에서 Alt+F2 키를 눌러 성능 프로파일러를 엽니다.

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

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

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

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

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

  4. 도구가 시작되면 앱에서 프로파일링하려는 시나리오를 진행합니다. 그런 다음 수집 중지를 선택하거나 앱을 닫아 데이터를 확인합니다.

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

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

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

    할당 탭의 스크린샷.

    할당 탭의 스크린샷.

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

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

Dotnet 할당 도구 설정의 스크린샷.

Dotnet 할당 도구 설정의 스크린샷.

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

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

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

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

데이터 이해

다음 그래픽 보기에서 상단 그래프는 앱의 라이브 개체 수를 보여줍니다. 아래쪽 개체 델타 그래프는 앱 개체의 변경율을 보여 줍니다. 빨간색 막대는 가비지 수집이 발생한 시기를 나타냅니다.

Dotnet 할당 도구 그래프의 스크린샷.

Dotnet 할당 도구 그래프의 스크린샷.

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

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

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

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

할당

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

확장된 할당 보기 스크린샷.

확장된 할당 보기 스크린샷.

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

  • 형식 열은 메모리를 사용하는 클래스 및 구조체의 목록입니다. 형식을 두 번 클릭하면 해당 역추적을 반전된 호출 트리로 볼 수 있습니다. 할당 뷰에서만 선택한 범주 내에서 메모리를 사용하는 항목을 볼 수 있습니다.

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

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

    두 열은 메모리를 사용하는 개체의 수가 아닌 메모리를 차지하는 양을 표시하는 것을 제외하고 합계(할당)자체(할당)와 비슷합니다. 이러한 열은 할당 뷰에서만 표시됩니다.

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

이 세 열은 모두 정렬할 수 있습니다. 형식모듈 이름 열의 경우 항목을 사전순(오름차순 또는 내림차순)으로 정렬할 수 있습니다. 할당, 바이트평균 크기(바이트)의 경우 항목을 크기순(오름차순 또는 내림차순)으로 정렬할 수 있습니다.

기호

다음 기호는 할당, 호출 트리함수 탭에 나타납니다.

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

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

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

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

호출 트리

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

호출 트리 뷰 스크린샷.

호출 트리 뷰 스크린샷.

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

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

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

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

확장된 실행 부하 과다 경로 스크린샷.

확장된 실행 부하 과다 경로 스크린샷.

함수

함수 뷰에서는 메모리를 할당하는 프로세스, 모듈 및 함수를 보여 줍니다.

함수 보기 스크린샷.

함수 보기 스크린샷.

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

  • Name 열에는 프로세스가 최상위 노드로 표시됩니다. 프로세스 아래에는 모듈이 있고, 모듈 아래에는 함수가 있습니다.

  • 다음 열은 할당통화 트리 보기에 표시되는 것과 동일한 정보를 표시합니다:

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

컬렉션

컬렉션 뷰는 가비지 수집 중 수집되거나 유지된 개체의 수를 보여 줍니다.

컬렉션 보기 스크린샷.

컬렉션 보기 스크린샷.

컬렉션 뷰에 표시되는 정보는 다음과 같습니다.

  • GC 열은 실행 파일의 수명 주기에서 이 가비지 수집의 ID를 표시합니다.
  • 생성 열에는 가비지 수집 생성이 표시됩니다.
  • GC 형식 열에는 이 가비지 수집의 형식이 표시됩니다.
  • GC 이유 열에는 이 가비지 수집 이벤트의 이유가 표시됩니다.
  • 일시 중지 기간 열에는 가비지 수집기에서 힙을 단독으로 사용해야 하므로 실행이 차단된 시간이 표시됩니다. 백그라운드 가비지 수집의 경우 이 값은 작습니다.
  • LOH 크기 열에는 가비지 수집기가 실행된 후의 큰 개체 힙 크기가 표시됩니다.
  • POH 사이즈 열은 가비지 수집기가 실행된 후 고정된 오브젝트 힙의 크기를 보여줍니다.
  • 종료 가능 Surv(MB) 열에는 가비지 수집에서 살아남은 종료자(소멸자)가 있는 개체의 MB 수가 표시됩니다.
  • 고정된 개체 열에는 이 가비지 수집이 승격된 고정된 개체의 수가 표시됩니다.
  • 수집됨 열에는 가비지 수집기에서 수집한 개체 수가 표시됩니다.
  • 유지됨 열에는 가비지 수집기가 실행된 후 남아 있는 개체 수를 표시합니다.

행을 선택하면 이 뷰에는 수집된 개체와 살아남은 개체를 유형별로 시각화할 수 있는 원형 차트도 표시됩니다.

컬렉션 보기의 파이차트 스크린샷.

필터링 도구

할당, 호출 트리함수 뷰는 모두 내 코드만 표시네이티브 코드 표시 옵션과 필터 상자를 포함합니다.

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