다음을 통해 공유


스토어 앱의 메모리 사용 분석(VB, C#, C++)

Visual Studio 2013 Update 2에서 성능 및 진단 허브의 메모리 사용량 도구를 사용하여 C#, Visual Basic 또는 C++ 및 XAML로 작성된 Windows 런타임 앱의 메모리 사용량을 분석할 수 있습니다. 특히 다음과 같은 작업을 수행할 수 있습니다.

  • 시나리오를 개발하는 동안 Visual Studio에서 직접 앱의 메모리 사용 권한을 모니터링합니다. 시스템 및 타사 도구를 사용할 필요가 없습니다.

  • 단 한 번 클릭하여 앱 메모리 상태에 대한 자세한 스냅숏을 만듭니다.

  • 스냅숏을 비교하여 감지하기 어렵거나 복잡한 메모리 문제의 근본 원인을 찾습니다.

참고

이 항목에서는 메모리 사용량 도구를 사용하여 C# 및 Visual Basic 앱을 분석하는 방법에 대해 설명합니다.

성능 및 진단 허브에서는 진단 세션을 실행하고 관리할 수 있는 옵션을 여러 가지 제공합니다.예를 들어 Windows Phone 앱 또는 Windows 스토어 앱에서 CPU 사용량 도구를 실행하거나 Visual Studio 컴퓨터, Windows Phone이나 Windows 스토어 장치 또는 Visual Studio 에뮬레이터나 시뮬레이터 중 하나에서 진단 세션을 실행할 수 있습니다.성능 및 진단 페이지에서 분석 도구 실행을 참조하십시오.

JavaScript 및 HTML을 사용하는 Windows 스토어 앱에서 메모리 사용량을 분석하려는 경우 메모리 사용량 분석(JavaScript)을 참조하세요.

C++ 및 C++/Cx 앱을 분석하는 방법을 비롯한 메모리 사용량 도구에 대한 자세한 내용은 Microsoft 응용 프로그램 수명 주기 관리 블로그에서 Visual Studio의 새 메모리 사용량 도구로 메모리 문제 진단을 참조하세요.

메모리 사용량 진단 세션 시작

  1. Visual Studio에서 프로젝트를 엽니다.

  2. 메뉴 모음에서 디버그성능 및 진단을 선택합니다.

  3. 성능 및 진단 허브 페이지에서 메모리 사용량을 선택한 다음 시작 단추를 선택합니다.

    메모리 사용량 진단 세션 시작

프로파일링 모드 선택

시작 프로젝트인 관리되는 앱과 함께 기본 구성 요소를 테스트할 수 있습니다. 또는 관리되는 앱은 단순한 테스트 도구이고 기본 메모리에만 관심이 있을 수 있습니다. 또는 관리되는 앱과 Windows 런타임 간의 관계를 알고 싶어 할 수도 있습니다. 이러한 경우 설정을 선택한 다음 대상 언어를 하나 이상 선택합니다.

프로그래밍 언어 선택

메모리 사용량 모니터링

메모리 사용량 도구로 문제를 찾아서 해결할 수 있는 상세 보고서를 생성할 수 있지만, 이 도구를 사용하여 적극적으로 개발 중인 시나리오에 대한 실시간 메모리 영향을 연구할 수도 있습니다.

진단 세션을 시작하면 앱이 시작되고, 성능 및 진단 페이지에 앱의 메모리 사용량에 대한 타임라인 그래프가 표시됩니다.

메모리 사용 모니터링

앱을 실행할 때 새로운 기능을 시도하거나 문제가 발생할 수 있는 시나리오를 연구할 수 있습니다. 메모리 사용량 타임라인 그래프에는 앱을 실행할 때 앱의 메모리 변동 사항이 표시됩니다.

그래프에 스파이크가 있으면 일반적으로 앱의 루틴이 데이터를 수집하거나 생성한 다음 처리가 완료되면 삭제함을 나타냅니다. 큰 스파이크는 최적화할 수 있는 방법이 있음을 나타냅니다. 비효율적인 메모리 사용량 또는 메모리 누수를 나타낼 수 있기 때문에 더욱 걱정스러운 점은 되돌릴 수 없는 메모리 사용량이 증가하는 문제입니다.

모니터링 세션 닫기

컬렉션 중지

보고서를 생성하지 않고 모니터링 세션을 중지하려면 진단 창을 닫기만 하면 됩니다. 메모리 스냅숏을 만들 때 보고서를 생성하려면 중지를 선택합니다.

스냅숏을 만들어 앱의 메모리 상태 분석

조사할 메모리 관련 문제를 발견하면 진단 세션이 진행되는 동안 스냅숏을 만들어서 특정 순간의 메모리 개체를 캡처할 수 있습니다. 앱에서 무수히 많은 개체 유형을 사용하므로 시나리오 하나에 대한 분석에 집중하려고 할 수 있습니다. 또한 메모리 문제가 나타나기 전 앱의 기본 스냅숏을 만들거나, 첫 번째 문제가 발생한 이후의 다른 스냅숏을 만들거나, 시나리오를 반복할 수 있는 경우 하나 이상의 추가 스냅숏을 만드는 것도 좋습니다.

스냅숏을 수집하려면 새로운 진단 세션을 시작합니다. 메모리 데이터를 캡처하려는 경우 스냅숏 만들기를 선택합니다. 보고서를 생성하려면 중지를 선택합니다.

메모리 사용량 개요 페이지

데이터 수집을 중지한 후 메모리 사용량 도구에서 앱을 중지하고 개요 보고서를 표시합니다.

메모리 사용량 개요 페이지

메모리 사용량 스냅숏 뷰

스냅숏 뷰를 사용하여 새 Visual Studio 창에서 자세한 보고서를 엽니다. 다음과 같은 두 종류의 스냅숏 뷰가 있습니다.

스냅숏 보기 링크

스냅숏 뷰 그림에서 번호가 있는 항목은 메모리 사용량 보고서 뷰를 여는 링크입니다.

1단계

링크 텍스트는 스냅숏을 만들 때 메모리의 총 바이트 수를 보여 줍니다.

이 링크를 선택하면 유형 인스턴스의 총 크기별로 정렬된 스냅숏 정보 보고서가 표시됩니다.

2단계

링크 텍스트는 스냅숏을 만들었을 때의 총 메모리 개체 수를 보여 줍니다.

이 링크를 선택하면 유형 인스턴스의 개수별로 정렬된 스냅숏 정보 보고서가 표시됩니다.

3단계

링크 텍스트는 현재 이 스냅숏의 총 메모리 개체 크기와 이전 스냅숏의 총 크기 간의 차이를 보여 줍니다.

이 스냅숏의 메모리 크기가 이전 스냅숏보다 크면 링크 텍스트는 양수이고 작으면 음수입니다. 링크 텍스트 기본은 이 스냅숏이 진단 세션의 첫 번째 스냅숏임을 나타냅니다. 차이 없음은 차이가 0임을 나타냅니다.

이 링크를 선택하면 유형 인스턴스의 총 크기 차이별로 정렬된 스냅숏 차이 보고서가 표시됩니다.

4단계

링크 텍스트는 이 스냅숏의 총 메모리 개체 수와 이전 스냅숏의 개체 수 간의 차이를 보여 줍니다.

이 링크를 선택하면 유형 인스턴스의 총 개수 차이별로 정렬된 스냅숏 차이 보고서가 표시됩니다.

스냅숏 보고서

메모리 사용량 스냅숏 보고서

스냅숏 보고서 트리

관리되는 힙

관리되는 힙 트리 관리되는 힙 트리(스냅숏 정보)관리되는 힙 트리(스냅숏 차이)는 보고서의 유형 및 인스턴스를 보여 줍니다. 유형 또는 인스턴스를 선택하면 선택한 항목에 대한 루트 경로참조 개체 트리가 표시됩니다.

루트 경로

루트 경로 트리(스냅숏 정보)루트 경로 트리(스냅숏 차이)는 유형 또는 인스턴스를 참조하는 개체의 체인을 보여 줍니다. .NET Framework 가비지 수집기는 개체에 대한 모든 참조가 해제된 경우에만 개체에 대한 메모리를 정리합니다.

참조된 개체

참조된 개체 트리(스냅숏 정보)참조된 개체 트리(스냅숏 차이)는 선택한 유형 또는 인스턴스가 참조하는 개체를 보여 줍니다.

개체 유형 및 인스턴스 필드

개체 유형 항목에 하위 항목이 있으면 화살표 아이콘을 클릭하여 하위 항목을 표시할 수 있습니다. 개체 유형 텍스트의 색상이 파란색이면 해당 항목을 선택하여 소스 코드 파일에서 해당 개체로 이동할 수 있습니다. 소스 파일은 별도의 창에서 열립니다.

인스턴스 이름은 메모리 사용량 도구에서 생성하는 고유한 ID입니다.

쉽게 식별할 수 없는 유형이 있거나, 이러한 유형이 코드에 어떻게 관련되어 있는지 몰라도 걱정하지 마세요.개체의 소유권 체인에 관련되어 있기 때문에 메모리 사용량 도구에서 표시하는 프레임워크, 운영 체제 또는 컴파일러의 개체일 수 있습니다.

보고서 트리 필터

대다수 앱에는 굉장히 다양한 유형이 있는데, 이 중 대부분의 유형에는 앱 개발자가 거의 관심을 두지 않습니다. 메모리 사용량 도구는 관리되는 힙루트 경로 트리에서 이러한 유형을 대부분 숨기는 데 사용할 수 있는 필터 두 개를 정의합니다. 또한 유형 이름별로 트리를 필터링할 수도 있습니다.

옵션 정렬 및 필터링

필터

필터 상자에 문자열을 입력하여 지정한 텍스트가 포함된 유형으로 트리 표시를 제한합니다. 필터는 대/소문자를 구분하지 않고 유형 이름의 모든 부분에서 지정한 문자열을 인식합니다.

작은 개체 축소

이 필터를 적용하면 **크기(바이트)**가 총 스냅숏 메모리 크기의 0.5%보다 작은 유형이 관리되는 힙 목록에서 숨겨집니다.

내 코드만

내 코드만 필터는 외부 코드로 생성된 인스턴스를 대부분 숨깁니다. 외부 유형은 운영 체제 또는 프레임워크 구성 요소에서 소유하거나 컴파일러에서 생성합니다.

스냅숏 정보 보고서

스냅숏 정보 보고서를 사용하여 진단 세션에서 스냅숏 하나에만 집중합니다. 정보 보고서를 열려면 다음 그림과 같이 스냅숏 뷰에서 링크 중 하나를 선택합니다. 두 링크 모두 동일한 보고서를 열지만, 보고서의 관리되는 힙 트리의 시작 정렬 순서만 다릅니다. 두 경우 모두 보고서를 열고 나서 정렬 순서를 변경할 수 있습니다.

스냅숏 뷰의 스냅숏 보고서 링크

  • MB 링크는 포함 크기(바이트) 열을 기준으로 보고서를 정렬합니다.

  • 개체 링크는 개수 열을 기준으로 보고서를 정렬합니다.

관리되는 힙 트리(스냅숏 정보)

관리되는 힙 트리에는 메모리에 보관된 개체 유형이 나열됩니다. 유형에서 가장 큰 인스턴스 10개를 크기별로 정렬해서 볼 수 있도록 유형 이름을 확장할 수 있습니다. 유형 또는 인스턴스를 선택하면 선택한 항목에 대한 루트 경로참조 개체 트리가 표시됩니다.

관리되는 힙 트리

개체 유형

유형 이름 또는 개체 인스턴스입니다.

개수

유형의 개체 인스턴스 수입니다. 인스턴스의 경우 이 숫자는 항상 1입니다.

크기(바이트)

유형의 경우 인스턴스에 포함된 개체 크기를 제외한 메모리 스냅숏 유형의 모든 인스턴스 크기입니다.

인스턴스의 경우 인스턴스에 포함된 개체 크기를 제외한 개체 크기입니다.

포함 크기(바이트)

포함된 개체 크기를 비롯한 유형의 인스턴스 크기 또는 단일 인스턴스 크기입니다.

루트 경로 트리(스냅숏 정보)

루트 경로 트리는 유형 또는 인스턴스를 참조하는 개체의 체인을 보여 줍니다. .NET Framework 가비지 수집기는 개체에 대한 모든 참조가 해제된 경우에만 개체에 대한 메모리를 정리합니다.

유형에 대한 루트 트리 경로

루트 경로 트리에서 유형을 보면 해당 유형을 참조하는 유형의 개체 수가 참조 개수 열에 표시됩니다. 인스턴스를 분석할 때에는 이 열이 나타나지 않습니다.

참조된 개체 트리(스냅숏 정보)

참조된 개체 트리는 선택한 유형 또는 인스턴스가 참조하는 개체를 보여 줍니다.

인스턴스에 대한 참조되는 개체 트리

개체 유형/인스턴스

유형 이름 또는 개체 인스턴스입니다.

크기(바이트)

유형의 경우 유형에 포함된 개체 크기를 제외한 유형의 모든 인스턴스 크기입니다.

인스턴스의 경우 개체에 포함된 개체 크기를 제외한 개체 크기입니다.

포함 크기(바이트)

포함된 개체의 크기를 비롯한 유형의 총 인스턴스 크기 또는 단일 인스턴스 크기입니다.

스냅숏 차이(diff) 보고서

스냅숏 차이(diff) 보고서는 기본 스냅숏과 기본 스냅숏 바로 직전에 만든 스냅숏 간의 변경 사항을 보여 줍니다. 차이 보고서를 열려면 다음 그림과 같이 스냅숏 뷰에서 링크 중 하나를 선택합니다. 두 링크 모두 동일한 보고서를 열지만, 보고서의 관리되는 힙 트리의 시작 정렬 순서만 다릅니다. 보고서를 연 후 정렬 순서를 변경할 수 있습니다.

스냅숏 뷰의 차이점 보고서 링크

  • MB 링크는 포함 크기(바이트) 열을 기준으로 보고서를 정렬합니다.

  • 개체 링크는 개수 열을 기준으로 보고서를 정렬합니다.

관리되는 힙 트리(스냅숏 차이)

관리되는 힙 트리에는 메모리에 보관된 개체 유형이 나열됩니다. 유형에서 가장 큰 인스턴스 10개를 크기별로 정렬해서 볼 수 있도록 유형 이름을 확장할 수 있습니다. 유형 또는 인스턴스를 선택하면 선택한 항목에 대한 루트 경로참조 개체 트리가 표시됩니다.

차이점 보고서의 유형에 대한 관리되는 힙 트리

그림에서 개수, 크기(바이트)포함 크기(바이트) 열은 축소되어 있습니다.

개체 유형

유형 이름 또는 개체 인스턴스입니다.

개수

기본 스냅숏에 있는 유형의 인스턴스 수입니다. 인스턴스의 경우 개수는 항상 1입니다.

개수 차이

유형의 경우 기본 스냅숏과 이전 스냅숏 간 유형의 인스턴스 수 차이입니다. 인스턴스의 경우 이 필드는 비어 있습니다.

크기(바이트)

개체에 포함된 개체의 크기를 제외한 기본 스냅숏의 개체 크기입니다. 유형의 경우 크기(바이트)포함 크기(바이트)는 유형 인스턴스의 총 크기입니다.

총 크기 차이(바이트)

유형의 경우 인스턴스에 포함된 개체 크기를 제외한 기본 스냅숏과 이전 스냅숏 간 유형의 총 인스턴스 크기의 차이를 나타냅니다. 인스턴스의 경우 이 필드는 비어 있습니다.

포함 크기(바이트)

개체에 포함된 개체의 크기를 비롯한 기본 스냅숏의 개체 크기입니다.

포함 크기 차이(바이트)

유형의 경우 개체에 포함된 개체 크기를 비롯한 기본 스냅숏과 이전 스냅숏 간 유형의 모든 인스턴스 크기 차이를 나타냅니다. 인스턴스의 경우 이 필드는 비어 있습니다.

루트 경로 트리(스냅숏 차이)

루트 경로 트리는 유형 또는 인스턴스를 참조하는 개체의 체인을 보여 줍니다. .NET Framework 가비지 수집기는 개체에 대한 모든 참조가 해제된 경우에만 개체에 대한 메모리를 정리합니다.

차이 뷰의 인스턴스에 대한 루트 트리 경로

참조된 개체 트리(스냅숏 차이)

참조된 개체 트리는 기본 유형 또는 인스턴스가 참조하는 개체를 보여 줍니다.

인스턴스에 대한 참조되는 개체 트리

개체 유형/인스턴스

유형 이름 또는 개체 인스턴스입니다.

크기(바이트)

인스턴스의 경우 인스턴스에 포함된 개체 크기를 제외한 기본 스냅숏의 개체 크기입니다.

유형의 경우 인스턴스에 포함된 개체 크기를 제외한 기본 스냅숏에 있는 유형의 총 인스턴스 크기입니다.

포함 크기(바이트)

개체에 포함된 개체의 크기를 비롯한 기본 스냅숏의 개체 크기입니다.

참고 항목

개념

메모리 사용 분석(JavaScript)

Visual Studio 진단 도구를 사용하여 Windows 스토어 앱의 성능 분석

성능 및 진단 페이지에서 분석 도구 실행

기타 리소스

C++, C# 및 Visual Basic을 사용하는 Windows 스토어 앱의 성능 모범 사례