.NET 개체 할당 도구를 사용하여 메모리 사용량 분석Analyze memory usage by using the .NET Object Allocation tool

.NET 개체 할당 도구를 사용하여 앱에서 사용하는 메모리의 양과 가장 많은 메모리를 할당하는 코드 경로를 확인할 수 있습니다.You can see how much memory your app uses and what code paths allocate the most memory by using the .NET Object Allocation tool.

이 도구를 실행한 후 개체가 할당되는 함수 실행 경로를 볼 수 있습니다.After running the tool, you can see the function execution paths where objects are being allocated. 그런 다음 가장 많은 메모리를 차지하는 호출 트리의 루트를 역으로 추적할 수 있습니다.You can then trace back to the root of the call tree that is taking up the most memory.

설정Setup

  1. Visual Studio에서 Alt+F2 키를 눌러 성능 프로파일러를 엽니다.Select Alt+F2 to open the Performance Profiler in Visual Studio.

  2. .NET 개체 할당 추적 확인란을 선택합니다.Select the .NET Object Allocation Tracking check box.

    Dotnet 개체 할당 추적 도구 선택됨The Dotnet Object Allocation Tracking tool selected

  3. 시작 단추를 선택하여 도구를 실행합니다.Select the Start button to run the tool.

  4. 도구가 시작되면 앱에서 프로파일링하려는 시나리오를 진행합니다.After the tool starts running, go through the scenario you want to profile in your app. 그런 다음 수집 중지 를 선택하거나 앱을 닫아 데이터를 확인합니다.Then select Stop collection or close your app to see your data.

    수집 중지를 표시하는 창A window showing Stop collection

  5. 할당 탭을 선택합니다. 다음 스크린샷과 비슷한 창 내용이 나타납니다.Select the Allocation tab. Window contents similar to the following screenshot appear.

    할당 탭The Allocation tab

이제 개체의 메모리 할당을 분석할 수 있습니다.You can now analyze the memory allocation of the objects.

추적 도구가 수집하는 동안 프로파일링되는 앱의 속도가 저하될 수 있습니다.During collection, the tracking tool can slow down the profiled app. 추적 도구 또는 앱의 성능이 느리고 모든 개체를 추적할 필요가 없는 경우 샘플링 비율을 조정할 수 있습니다.If performance of the tracking tool or the app is slow, and if you don't need to track every object, you can adjust the sampling rate. 이렇게 하려면 프로파일러 요약 페이지에서 추적 도구 옆에 있는 기어 기호를 선택합니다.To do so, select the gear symbol next to the tracking tool in the profiler summary page.

Dotnet 할당 도구에 대한 설정Settings for the Dotnet Allocation tool

샘플링 비율을 원하는 대로 조정합니다.Adjust the sampling rate to the rate you want. 이러한 변경은 수집 및 분석 중에 앱의 성능을 향상시키는 데 도움이 됩니다.This change helps speed up performance of your app during collection and analysis.

조정된 샘플링 비율An adjusted sampling rate

도구를 보다 효율적으로 만드는 방법에 대한 자세한 내용은 프로파일러 설정 최적화를 참조하세요.For more information on how to make the tool more efficient, see Optimizing Profiler settings.

데이터 이해Understand your data

Dotnet 할당 도구 그래프A graph for the Dotnet Allocation tool

위의 그래픽 보기에서 위쪽 그래프는 앱의 활성 개체 수를 표시합니다.In the preceding graphical view, the top graph shows the number of live objects in your app. 아래쪽 개체 델타 그래프는 앱 개체의 변경율을 보여 줍니다.The bottom Object delta graph shows the percentage change of app objects. 빨간색 막대는 가비지 수집이 발생한 시기를 나타냅니다.Red bars denote when garbage collection took place.

Dotnet 할당 시간의 필터링된 그래프A filtered graph of the Dotnet Allocation time

지정된 시간 범위에서만 활동을 표시하도록 테이블 형식 데이터를 필터링 할 수 있습니다.You can filter the tabular data to display activity for only a specified time range. 그래프를 확대/축소할 수도 있습니다.You can also zoom into or out of the graph.

할당Allocation

할당 뷰가 확장됨The Allocation view expanded

할당 뷰 에는 메모리를 할당하는 개체의 위치와 해당 개체가 할당하는 메모리의 양이 표시됩니다.The Allocation view shows the location of objects that are allocating memory and how much memory those objects are allocating.

  • 형식 열은 메모리를 사용하는 클래스 및 구조체의 목록입니다.The Type column is a list of classes and structures that take up memory. 형식을 두 번 클릭하면 해당 역추적을 반전된 호출 트리로 볼 수 있습니다.Double-click a type to view its backtrace as an inverted call tree. 할당 뷰에서만 선택한 범주 내에서 메모리를 사용하는 항목을 볼 수 있습니다.In the Allocation view only, you can see items within the selected category that take up memory.

  • 할당 열에는 특정 할당 유형 또는 함수 내에서 메모리를 사용하는 개체의 수가 표시됩니다.The Allocations column shows the number of objects that take up memory within a particular allocation type or function. 이 열은 할당, 호출 트리함수 뷰에만 표시됩니다.This column appears only in the Allocation, Call Tree, and Functions views.

  • 바이트평균 크기(바이트) 열은 기본적으로 표시되지 않습니다.The Bytes and Average Size (Bytes) columns don't appear by default. 이러한 항목을 표시하려면 형식 또는 할당 열을 마우스 오른쪽 단추로 클릭한 다음, 바이트평균 크기(바이트) 옵션을 선택하여 차트에 추가합니다.To show them, right-click the Type or Allocations column, and then select the Bytes and Average Size (Bytes) options to add them to the chart.

    두 열은 메모리를 사용하는 개체의 수가 아닌 메모리를 차지하는 양을 표시하는 것을 제외하고 합계(할당)자체(할당) 와 비슷합니다.The two columns are similar to Total (Allocations) and Self (Allocations), except they show the amount of memory taken up instead of the number of objects taking up memory. 이러한 열은 할당 뷰에서만 표시됩니다.These columns appear only in the Allocation view.

  • 모듈 이름 열에는 호출하는 함수 또는 프로세스가 포함된 모듈이 표시됩니다.The Module name column shows the module that contains the function or process that is calling.

이 세 열은 모두 정렬할 수 있습니다.All of these columns are sortable. 형식모듈 이름 열의 경우 항목을 사전순(오름차순 또는 내림차순)으로 정렬할 수 있습니다.For the Type and Module Name columns, you can sort items alphabetically in either ascending or descending order. 할당, 바이트평균 크기(바이트) 의 경우 항목을 크기순(오름차순 또는 내림차순)으로 정렬할 수 있습니다.For Allocations, Bytes and Average Size (Bytes), you can sort items by increasing or decreasing numeric value.

기호Symbols

다음 기호는 할당, 호출 트리함수 탭에 나타납니다.The following symbols appear in the Allocation, Call Tree, and Functions tabs:

  • 값 형식 기호 - 정수 등의 값 형식입니다.The value type symbol - A value type like integer

  • 값 형식 컬렉션 기호 -정수 배열 등의 값 형식 컬렉션입니다.The value-type collection symbol - A value-type collection like array of integers

  • 참조 형식 기호 - 문자열과 같은 참조 형식입니다.The reference type symbol - A reference type like string

  • 참조 형식 컬렉션 기호 - 문자열 배열과 같은 참조 형식 컬렉션입니다.The reference-type collection symbol - A reference-type collection like array of strings

호출 트리Call Tree

호출 트리 뷰The Call Tree view

호출 트리 뷰에는 많은 메모리를 할당하는 개체가 포함된 함수 실행 경로가 표시됩니다.The Call Tree view shows the function execution paths that contain objects allocating much memory.

  • 함수 이름 열에는 메모리를 할당하는 개체를 포함하는 함수의 프로세스 또는 이름이 표시됩니다.The Function Name column shows the process or name of the function containing objects that allocate memory. 검사하는 노드의 수준을 기반으로 표시됩니다.The display is based on the level of the node you're inspecting.

  • 합계(할당)총 크기(바이트) 열에는 할당된 개체의 수와 특정 함수 및 이로부터 호출되는 다른 모든 함수에서 사용하는 메모리 양이 표시됩니다.The Total (Allocations) and Total Size (Bytes) columns show the number of allocated objects and the amount of memory that is used by a function and all other functions it calls.

  • 자체(할당)자체 크기(바이트) 열에는 할당된 개체의 수와 선택한 단일 함수 또는 할당 형식에 사용되는 메모리 양이 표시됩니다.The Self (Allocations) and Self-Size (Bytes) columns show the number of allocated objects and the amount of memory that is used by a single selected function or allocation type.

  • 평균 크기(바이트) 열은 할당 뷰에서와 동일한 정보를 표시합니다.The Average Size (Bytes) column shows the same information as it does in the Allocations view.

  • 모듈 이름 열에는 호출하는 함수 또는 프로세스가 포함된 모듈이 표시됩니다.The Module name column shows the module that contains the function or process that is calling.

    실행 부하 과다 경로 확장됨A hot path expanded

  • 실행 부하 과다 경로 확장 단추를 선택하면 메모리를 할당하는 개체를 많이 포함하는 함수 실행 경로를 강조 표시합니다.The Expand Hot Path button highlights a function execution pathway that contains many objects that are allocating memory. 알고리즘은 선택한 노드에서 시작되고 할당이 가장 많은 경로를 강조 표시하여 조사를 안내합니다.The algorithm starts at a node you select and highlights the path of the most allocations, guiding you in your investigation.

  • 실행 부하 과다 경로 단추는 실행 부하 과다 경로에 속하는 노드를 나타내는 불꽃 기호를 표시하거나 숨깁니다.The Show Hot Path button shows or hides the flame symbols that indicate which nodes are part of the hot path.

함수Functions

함수 뷰The Functions view

함수 뷰에서는 메모리를 할당하는 프로세스, 모듈 및 함수를 보여 줍니다.The Functions view shows processes, modules, and functions that are allocating memory.

  • Name 열에는 프로세스가 최상위 노드로 표시됩니다.The Name column shows processes as the highest-level nodes. 프로세스 아래에는 모듈이 있고, 모듈 아래에는 함수가 있습니다.Underneath processes are modules, and underneath modules are functions.

  • 이러한 열은 할당호출 트리 뷰에서와 동일한 정보를 표시합니다.These columns show the same information as they do in the Allocation and Call tree views:

    • 합계(할당)Total (Allocations)
    • 자체(할당)Self (Allocations)
    • 총 크기(바이트)Total Size (Bytes)
    • 자체 크기(바이트)Self Size (Bytes)
    • 평균 크기(바이트)Average Size (Bytes)

컬렉션Collection

컬렉션 뷰The Collection view

컬렉션 뷰는 가비지 수집 중 수집되거나 유지된 개체의 수를 보여 줍니다.The Collection view shows how many objects were collected or retained during garbage collection. 또한 이 뷰는 수집된 개체와 유지된 개체를 형식별로 시각화하는 원형 차트를 제공합니다.This view also shows pie charts to visualize collected and survived objects by type.

  • 수집됨 열에는 가비지 수집기에서 수집한 개체 수가 표시됩니다.The Collected column shows the number of objects that the garbage collector collected.
  • 유지됨 열에는 가비지 수집기가 실행된 후 남아 있는 개체 수를 표시합니다.The Survived column shows the number of objects that survived after the garbage collector was run.

필터링 도구Filtering tools

할당, 호출 트리함수 뷰는 모두 내 코드만 표시네이티브 코드 표시 옵션과 필터 상자를 포함합니다.The Allocations, Call Tree, and Functions views all contain the Show Just My Code and Show Native Code options and a filter box.

  • 내 코드만 표시 는 코드에만 집중할 수 있도록 시스템, 프레임워크 및 기타 사용자 코드가 아닌 코드를 [외부 코드] 프레임으로 축소합니다.Show Just My Code collapses systems, frameworks, and other nonuser code into [External Code] frames so that you can focus on just your code. 자세한 내용은 내 코드만으로 사용자 코드 디버그를 참조하세요.For more information, see Debug user code with Just My Code.
  • 네이티브 코드 표시 는 분석 대상 내의 네이티브 코드를 표시하고 사용자 코드가 아닌 코드를 포함할 수 있습니다.Show Native Code shows native code within the analysis target and can include nonuser code.
  • 필터 상자를 사용하여 이름 또는 함수 이름 열을 입력한 값을 기준으로 정렬할 수 있습니다.With the filter box, you can filter down the Name or Function name column based on the value you provide. 상자에 문자열 값을 입력합니다.Enter a string value in the box. 그러면 테이블에 해당 문자열이 포함된 형식만 표시됩니다.The table then shows only types that contain that string.