초보자를 위한 성능 프로파일링 지침Beginner's Guide to Performance Profiling

Visual Studio 프로파일링 도구를 사용하여 응용 프로그램의 성능 문제를 분석할 수 있습니다.You can use Visual Studio profiling tools to analyze performance issues in your application. 이 절차에서는 진단 도구의 CPU 사용량 탭을 사용하여 앱의 성능 데이터를 가져오는 방법을 보여 줍니다.This procedure shows how to use CPU Usage tab of the Diagnostics Tools to obtain performance data for your app. 진단 도구는 ASP.NET을 포함한 Visual Studio의 .NET 개발 및 네이티브/C++ 개발에 사용할 수 있습니다.The Diagnostics Tools are supported for .NET development in Visual Studio, including ASP.NET, and for native/C++ development.

디버거가 일시 중지되면 CPU 사용량 도구는 응용 프로그램에서 실행되는 함수에 대한 정보를 지정된 간격으로 수집합니다.When the debugger pauses, the CPU Usage tool collects information about the functions that are executing in your application. 또한 이 도구에는 작업을 수행하는 함수가 표시되고 샘플링 세션의 특정 세그먼트를 집중적으로 확인할 수 있는 타임라인 그래프도 표시됩니다.The tool lists the functions that were performing work, and provides a timeline graph you can use to focus on specific segments of the sampling session.

진단 허브에서는 진단 세션을 실행하고 관리할 수 있는 여러 가지 다른 옵션을 제공합니다.The Diagnostic hub offers you a lot of other options to run and manage your diagnostics session. CPU 사용량으로 필요한 데이터를 얻지 못할 경우 다른 프로파일링 도구로 유용한 다른 종류의 정보를 얻을 수 있습니다.If CPU Usage does not give you the data that you need, the other profiling tools provide different kinds of information that might be helpful to you. 많은 경우 메모리, UI 렌더링 또는 네트워크 요청 시간 등 CPU가 아닌 곳에서 응용 프로그램의 성능 병목 현상이 발생할 수 있습니다.In many cases, the performance bottleneck of your application may be caused by something other than your CPU, such as memory, rendering UI, or network request time. 진단 허브는 이러한 종류의 데이터를 기록 및 분석하기 위한 다른 여러 옵션을 제공합니다.The Diagnostics hub offers you a lot of other options to record and analyze this kind of data.

비디오 보기Watch a video CPU 사용량 분석 방법 및 메모리 사용량 분석 방법을 보여 주는 진단 도구 사용에 대한 비디오를 시청합니다.Watch a video on using the diagnostics tools that shows how to analyze CPU usage and how to analyze memory usage.

이 항목에서는 일반적인 디버깅 워크플로에서의 CPU 사용량 분석에 대해 설명합니다.In this topic, we'll discuss analyzing CPU usage in your normal debugging workflow. 디버거를 연결하지 않고 또는 실행 중인 앱을 대상으로 지정하여 CPU 사용량을 분석할 수도 있습니다. 자세한 내용은 디버거를 사용하거나 사용하지 않고 프로파일링 도구 실행디버깅을 사용하지 않고 프로파일링 데이터 수집을 참조하세요.You can also analyze CPU usage without a debugger attached or by targeting a running app - for more information see Collect profiling data without debugging in Run profiling tools with or without the debugger.

1단계: 프로파일링 데이터 수집Step 1: Collect profiling data

  1. Visual Studio에서 디버그할 프로젝트를 열고 CPU 사용량을 검사할 지점에서 앱에 중단점을 설정합니다.Open the project you want to debug in Visual Studio and set a breakpoint in your app at the point where you want to examine CPU usage.

  2. 분석할 함수 또는 코드 영역 끝에 두 번째 중단점을 설정합니다.Set a second breakpoint at the end of the function or region of code that you want to analyze.

    두 개의 중단점을 설정하여, 분석하려는 코드 부분으로 데이터 수집을 제한할 수 있습니다.By setting two breakpoints, you can limit data collection to the parts of code that you want to analyze.

  3. 끄지 않았다면 진단 도구 가 자동으로 나타납니다.The Diagnostic Tools window appears automatically unless you have turned it off. 창을 다시 표시하려면 디버그/Windows/진단 도구 표시를 클릭합니다.To bring up the window again, click Debug / Windows / Show Diagnostic Tools.

  4. 도구 모음의 도구 선택 설정을 사용하여 CPU 사용량을 표시할지, 메모리 사용량을 표시할지, 아니면 둘 다 표시할지를 선택할 수 있습니다.You can choose whether to see CPU Usage, Memory Usage, or both, with the Select Tools setting on the toolbar. Visual Studio Enterprise를 실행 중인 경우 도구/옵션/IntelliTrace에서 IntelliTrace를 사용하거나 사용하지 않도록 설정할 수도 있습니다.If you are running Visual Studio Enterprise, you can also enable or disable IntelliTrace in Tools / Options / IntelliTrace.

    진단 도구 표시Show Diagnostics Tools

    주로 CPU 사용률을 살펴볼 것이므로 CPU 사용량을 사용하도록 설정했는지(기본적으로 사용됨) 확인하세요.We will mainly be looking at CPU utilization, so make sure that CPU Usage is enabled (it is enabled by default).

  5. 디버그/디버깅 시작을 클릭합니다(또는 도구 모음에서 시작 또는 F5 누름).Click Debug / Start Debugging (or Start on the toolbar, or F5).

    앱 로드가 완료되면 진단 도구의 요약 보기가 나타납니다.When the app finishes loading, the Summary view of the Diagnostics Tools appears.

    진단 도구 요약 탭Diagnostics Tools Summary Tab

    이벤트에 대한 자세한 내용은 진단 도구 창의 이벤트 탭 검색 및 필터링을 참조하세요.For more information on the events, see Searching and filtering the Events tab of the Diagnostic Tools window

  6. 첫 번째 중단점이 발생할 시나리오를 실행합니다.Run the scenario that will cause your first breakpoint to be hit.

  7. 디버거가 일시 중지된 동안 CPU 사용량 데이터 수집을 사용하도록 설정한 다음 CPU 사용량 탭을 엽니다.While the debugger is paused, enable the collection of the CPU Usage data and then open the CPU Usage tab.

    진단 도구에서 CPU 프로파일링을 사용하도록 설정Diagnostics Tools Enable CPU Profiling

    CPU 프로파일링 사용을 선택하면 Visual Studio는 함수 및 함수 실행에 걸리는 시간의 기록을 시작합니다.When you choose Enable CPU Profiling, Visual Studio will begin recording your functions and how much time they take to execute. 응용 프로그램이 중단점에서 멈추면 이렇게 수집된 데이터만 볼 수 있습니다.You can only view this collected data when your application is halted at a breakpoint.

  8. 두 번째 중단점까지 앱을 실행하려면 F5 키를 누릅니다.Hit F5 to run the app to your second breakpoint.

    이제 구체적으로 두 개의 중단점 사이에서 실행되는 코드 영역에 대한 응용 프로그램의 성능 데이터가 제공됩니다.Now, you now have performance data for your application specifically for the region of code that runs between the two breakpoints.

  9. CPU 타임라인에서 분석하고자 하는 영역을 선택합니다(프로파일링 데이터를 표시하는 영역이어야 함).Select the region you're interested in analyzing in the CPU timeline (it must be a region that shows profiling data).

    시간 세그먼트를 선택하는 진단 도구Diagnostics Tools Selecting a Time Segment

    프로파일러는 스레드 데이터 준비를 시작합니다.The profiler begins preparing thread data. 끝날 때까지 기다립니다.Wait for it to finish.

    스레드를 준비하는 진단 도구Diagnostics Tools Preparing Threads

    CPU 사용량 도구는 CPU 사용량 탭에 보고서를 표시합니다.The CPU Usage tool displays the report in the CPU Usage tab.

    진단 도구 CPU 사용량 탭Diagnostics Tools CPU Usage Tab

    이 시점에서 데이터 분석을 시작할 수 있습니다.At this point, you can begin to analyze the data.

2단계: CPU 사용량 데이터 분석Step 2: Analyze CPU usage data

CPU 사용량 아래의 함수 목록을 검사하고, 가장 많은 작업을 수행하는 함수를 확인한 다음, 각 함수를 자세히 살펴보는 방식으로 데이터 분석을 시작하는 것이 좋습니다.We recommend that you begin analyzing your data by examining the list of functions under CPU Usage, identifying the functions that are doing the most work, and then taking a closer look at each one.

  1. 함수 목록에서 가장 많은 작업을 수행하는 함수를 검사합니다.In the function list, examine the functions that are doing the most work.

    진단 도구 CPU 사용량 함수 목록Diagnostics Tools CPU Usage Function List

    함수는 가장 많은 작업을 수행하는 것부터 나열됩니다(호출 순서가 아님).Functions are listed in order starting with those doing the most work (they're not in call order). 따라서 가장 오래 실행된 함수를 빠르게 식별할 수 있습니다.This helps you quickly identify the longest running functions.

  2. 함수 목록에서 많은 작업을 수행한 앱 함수 중 하나를 두 번 클릭합니다.In the function list, double-click one of your app functions that is doing a lot of work.

    함수를 두 번 클릭하면 호출자/호출 수신자 뷰가 왼쪽 창에 열립니다.When you double-click a function, the Caller/Callee view opens in the left pane.

    진단 도구 호출자 호출 수신자 뷰Diagnostics Tools Caller Callee View

    이 뷰에서는 선택한 함수가 제목 및 현재 함수 상자에 표시됩니다(이 예제의 경우 GetNumber).In this view, the selected function shows up in the heading and in the Current Function box (GetNumber, in this example). 현재 함수를 호출한 함수는 호출 함수 아래 왼쪽에 표시되고, 현재 함수에 의해 호출된 함수는 오른쪽의 호출된 함수 상자에 표시됩니다.The function that called the current function is shown on the left under Calling Function, and any functions called by the current function are shown in Called Functions box on the right. 두 상자 중 하나를 선택하여 현재 함수를 변경할 수 있습니다.(You can select either box to change the current function.)

    이 뷰는 함수를 완료하는 데 걸린 총 시간(ms) 및 전체 앱 실행 시간의 백분율을 표시합니다.This view shows you the total time (ms) and the percentage of the overall app running time that the function has taken to complete. 함수 본문은 또한 호출 함수 및 호출된 함수에 사용된 시간을 제외하고 함수 본문에 사용된 총 시간(및 시간의 백분율)을 표시합니다.Function Body also shows you the total amount of time (and the percentage of time) spent in the function body excluding time spent in calling and called functions. 이 예제에서는 3729ms 중 3713ms가 함수 본문에 사용되었고 나머지 16ms는 이 함수에 의해 호출된 외부 코드에 사용되었습니다.(In this example, 3713 out of 3729 ms were spent in the function body, and the remaining 16 ms were spent in external code called by this function).

    함수 본문의 값이 높으면 함수 자체 내에서 성능 병목 현상이 있는 것일 수 있습니다.High values in Function Body may indicate a performance bottleneck within the function itself.

  3. 함수가 호출되는 순서를 표시하는 상위 수준의 뷰를 보려면 창 상단의 드롭다운 목록에서 호출 트리를 선택합니다.If you want to see a higher-level view showing the order in which the functions are called, select Call Tree from the drop-down list at the top of the pane.

    그림에서 번호가 매겨진 각 영역은 절차의 단계와 관련되어 있습니다.Each numbered area in the figure relates to a step in the procedure.

    진단 도구 호출 트리Diagnostics Tools Call Tree

1단계Step 1 CPU 사용량 호출 트리의 최상위 노드는 의사 노드입니다.The top-level node in CPU Usage call trees is a pseudo-node
2단계Step 2 대다수 앱에서 외부 코드 포시 옵션이 사용하지 않도록 설정되어 있는 경우 두 번째 수준 노드는 앱을 시작/중지하고, UI를 그리며, 스레드 일정을 제어하고, 앱에 다른 낮은 수준 서비스를 제공하는 시스템과 프레임워크 코드가 포함된 [External Code] 노드입니다.In most apps, when the Show External Code option is disabled, the second-level node is an [External Code] node that contains the system and framework code that starts and stops the app, draws the UI, controls thread scheduling, and provides other low-level services to the app.
3단계Step 3 두 번째 수준 노드의 자식은 두 번째 수준 시스템과 프레임워크 코드가 호출하거나 만드는 사용자 코드 메서드 및 비동기 루틴입니다.The children of the second-level node are the user-code methods and asynchronous routines that are called or created by the second-level system and framework code.
4단계Step 4 메서드의 자식 노드에는 부모 메서드 호출에 대한 데이터만 포함되어 있습니다.Child nodes of a method contain data only for the calls of the parent method. 외부 코드 표시 가 사용하지 않도록 설정되어 있으면 앱 메서드에 [External Code] 노드를 포함할 수 있습니다.When Show External Code is disabled, app methods can also contain an [External Code] node.

열 값에 대한 자세한 내용은 다음과 같습니다.Here is more information on the column values:

  • 총 CPU는 해당 함수와 이 함수에 의해 호출된 함수가 수행한 작업의 양을 나타냅니다.Total CPU indicates how much work was done by the function and any functions called by it. 총 CPU 값이 높으면 전반적인 비용이 가장 많이 드는 함수인 것입니다.High total CPU values point to the functions that are most expensive overall.

  • 셀프 CPU는 호출된 함수에 의해 수행된 작업은 제외하고 함수 본문의 코드에 의해 수행된 작업의 양을 나타냅니다.Self CPU indicates how much work was done by the code in the function body, excluding the work done by functions that were called by it. 셀프 CPU 값이 높으면 함수 자체 내에서 성능 병목 현상이 있는 것일 수 있습니다.High Self CPU values may indicate a performance bottleneck within the function itself.

  • 모듈 함수가 포함된 모듈의 이름 또는 [External Code] 노드에 함수가 포함된 모듈의 수입니다.Modules The name of the module containing the function, or the number of modules containing the functions in an [External Code] node.

외부 코드 보기View external code

외부 코드는 사용자가 작성한 코드에서 실행된 시스템 및 프레임워크 구성 요소의 함수입니다.External code are functions in system and framework components that executed by the code you write. 외부 코드에는 앱을 시작 및 중지하고, UI를 그리며, 스레딩을 제어하고, 앱에 다른 낮은 수준 서비스를 제공하는 함수가 포함되어 있습니다.External code include functions that start and stop the app, draw the UI, control threading, and provide other low-level services to the app. 대부분의 경우 외부 코드에 관심이 없으므로 CPU 사용량 도구에서 사용자 메서드의 외부 함수를 하나의 [External Code] 노드로 수집합니다.In most cases, you won't be interested in external code, and so the CPU Usage tool gathers the external functions of a user method into one [External Code] node.

외부 코드의 호출 경로를 보려면 필터 뷰 목록에서 외부 코드 표시를 선택한 다음 적용을 선택합니다.If you want to view the call paths of external code, choose Show External Code from the Filter view list and then choose Apply.

필터 뷰 선택 후 외부 코드 표시Choose Filter View, then Show External Code

여러 외부 코드 호출 체인은 깊이 중첩되어 있으므로 함수 이름 열의 너비가 컴퓨터 모니터의 거의 최대 화면 너비를 초과할 수 있습니다.Be aware that many external code call chains are deeply nested, so that the width of the Function Name column can exceed the display width of all but the largest of computer monitors. 이런 경우 함수 이름은 다음과 같이 […]로 표시됩니다.When this happens, function names are shown as [...].

검색 상자를 사용하여 검색 중인 노드를 찾은 다음, 가로 스크롤 막대를 사용하여 데이터를 뷰로 가져옵니다.Use the search box to find a node that you are looking for, then use the horizontal scroll bar to bring the data into view.

Windows 함수를 호출하는 외부 코드를 프로파일링하는 경우 가장 최근의 .pdb 파일이 있는지 확인해야 합니다.If you profile external code that calls Windows functions, you should make sure that you have the most current .pdb files. 이 파일이 없으면 보고서 뷰에 암호화되어 이해하기 어려운 Windows 함수 이름이 표시됩니다.Without these files, your report views will list Windows function names that are cryptic and difficult to understand. 필요한 파일이 있는지 확인하는 방법에 대한 자세한 내용은 디버거에서 기호(.pdb) 및 소스 파일 지정을 참조하세요.For more information about how to make sure that you have the files you need, see Specify Symbol (.pdb) and Source Files in the Debugger.

진단 도구에 대한 비디오 시청Watch a video on using the diagnostics tools

참고 항목See Also

메모리 사용Memory Usage
CPU 사용량CPU Usage
Visual Studio의 프로파일링Profiling in Visual Studio
프로파일링 기능 둘러보기Profiling Feature Tour