다음을 통해 공유


먼저 프로파일링 도구 살펴보기(C#, Visual Basic, C++, F#)

애플리케이션 성능 측정 도구는 코드를 최적화하고 애플리케이션 성능을 개선하려는 개발자에게 필수적입니다. Visual Studio는 메모리 및 CPU 사용량 및 기타 애플리케이션 수준 문제를 진단하는 데 도움이 되는 다양한 프로파일링 및 진단 도구를 제공합니다. 이러한 도구를 사용하면 애플리케이션을 실행하는 동안 성능 데이터를 누적할 수 있습니다. 프로파일러를 사용하면 애플리케이션에 대한 실행 시간 및 CPU 사용량에 대한 시각적 묘사를 제공하여 정보에 입각한 의사 결정을 신속하게 내릴 수 있습니다. 이 문서에서는 가장 일반적인 프로파일링 도구를 간단히 살펴보겠습니다.

올바른 도구를 선택하거나 다양한 앱 유형에 대한 프로파일링 도구 지원을 보려면 어떤 도구를 사용해야 하나요? 프로파일링 도구를 사용하여 코드를 최적화하는 일반적인 방법을 보여 주는 자습서는 사례 연구: 코드최적화에 대한 초보자 가이드를 참조하세요.

이 설명서를 사용하여 최상의 환경을 제공하려면 문서 맨 위에 있는 목록에서 원하는 개발 언어 또는 런타임을 선택합니다.

릴리스 빌드에서 성능 측정

성능 프로파일러의 도구는 릴리스 빌드에 대한 분석을 제공하기 위한 것입니다. 성능 프로파일러에서 앱이 실행되는 동안 진단 정보를 수집한 다음 앱이 중지된 후 수집된 정보를 검사할 수 있습니다(사후 분석).

디버그>성능 프로파일러(또는 Alt + F2 )을 선택하여 성능 프로파일러를 엽니다.

성능 프로파일러의 스크린샷

성능 프로파일러의 스크린샷

CPU 사용량 또는 메모리 사용량 도구를 성능 프로파일러에서 사용하는 방법과 디버거 통합 도구에서 사용하는 방법에 대한 자세한 내용은 릴리스 또는 디버그 빌드에서 프로파일링 도구 실행을 참조하세요.

성능 프로파일러에서 사용할 수 있는 도구는 다음과 같습니다.

다양한 앱 유형에 대한 프로파일링 도구 지원을 보려면 어떤 도구를 사용해야 하나요?.

일부 시나리오에서는 창에서 여러 프로파일링 도구 선택할 수 있습니다. CPU 사용량과 같은 도구는 분석에 도움이 되는 보완 데이터를 제공할 수 있습니다. 명령줄 프로파일러 사용하여 여러 프로파일링 도구와 관련된 시나리오를 사용하도록 설정할 수도 있습니다.

디버깅하는 동안 성능 측정

디버깅 세션 중에 액세스할 수 있는 프로파일링 도구는 진단 도구 창에서 사용할 수 있습니다. 진단 도구 창은 해제하지 않은 한 자동으로 표시됩니다. 창을 표시하려면 디버그/Windows/진단 도구 표시를 클릭하거나 Ctrl 키를 + Alt + F2누릅니다. 창이 열리면 데이터를 수집할 도구를 선택할 수 있습니다.

진단 도구 창

디버깅하는 동안 진단 도구 창을 사용하여 CPU, 메모리 사용량, .NET 카운터를 분석하고 성능 관련 정보를 표시하는 이벤트를 볼 수 있습니다.

진단 도구 창 진단 도구

디버깅하는 동안 진단 도구 창을 사용하여 CPU 및 메모리 사용량을 분석하고 성능 관련 정보를 표시하는 이벤트를 볼 수 있습니다.

진단 도구 요약 보기

진단 도구 요약 보기

진단 도구 창은 앱을 프로파일하는 일반적인 방법이지만 릴리스 빌드의 경우 대신 앱에 대한 사후 분석을 수행할 수도 있습니다. 다양한 방법에 대한 자세한 내용은 릴리스 또는 디버그 빌드에서 프로파일링 도구를 실행을 참조하세요. 다양한 앱 유형에 대한 프로파일링 도구 지원을 보려면 어떤 도구를 사용해야 하나요?.

진단 도구 창 또는 디버깅 세션 중에 사용할 수 있는 도구는 다음과 같습니다.

다시 시작을 사용하여 시작 페이지를 건너뛰고 Alt+F2 누르거나 디버그 > 성능 프로파일러클릭하여 이전 설정으로 자동으로 실행됩니다.

메모

디버거를 사용하여 프로파일링 도구를 실행하려면 Windows 8 이상이 필요합니다(진단 도구 창).

CPU 사용량 분석

CPU 사용량 도구는 앱의 성능 분석을 시작하기에 좋은 장소입니다. 앱에서 사용하는 CPU 리소스에 대해 자세히 설명합니다. 디버거 통합 CPU 사용량 도구 또는 사후 CPU 사용량 도구를 사용할 수 있습니다.

디버거 통합 CPU 사용량 도구를 사용하는 경우 진단 도구 창을 엽니다. (닫혀 있는 경우 디버그 / Windows / 진단 도구 보이기을 선택). 디버깅하는 동안 요약 보기를 열고 레코드 CPU 프로필선택합니다.

진단 도구에서 CPU 사용 설정

진단 도구에서 CPU 사용을 활성화

이 도구를 사용하는 한 가지 방법은 코드에서 두 개의 중단점을 설정하는 것입니다. 하나는 처음이고 다른 하나는 함수의 끝이나 분석하려는 코드 영역입니다. 두 번째 중단점에서 일시 중지될 때 프로파일링 데이터를 검사합니다.

CPU 사용량 보기는 가장 긴 실행 순서로 정렬된 함수 목록을 보여 줍니다. Top Functions아래에는 가장 오래 실행된 함수가 맨 위에 표시됩니다. 핫 경로 섹션에서는 CPU를 가장 많이 사용하는 함수에 대한 호출 스택을 보여 줍니다. 이러한 목록은 성능 병목 현상이 발생하는 함수를 안내하는 데 도움이 될 수 있습니다.

진단 도구 CPU 사용량 보기진단 도구 CPU 사용량

CPU 사용량 보기에는 가장 오래 실행되는 함수가 맨 위에 있는 가장 긴 실행 순서로 정렬된 함수 목록이 표시됩니다. 이렇게 하면 성능 병목 현상이 발생하는 함수를 안내할 수 있습니다.

진단 도구 CPU 사용량 보기진단 도구 CPU 사용량

관심 있는 함수를 클릭하면 선택한 함수가 강조 표시된 호출 트리 보기가 표시됩니다. 표에는 호출된 함수를 포함하여 함수에서 소요된 시간을 보여주는 첫 번째 열(총 CPU)과 호출된 함수를 제외한 함수에서 소요된 시간을 보여주는 두 번째 열(자체 CPU)이 있습니다. 이 데이터는 함수 자체가 성능 병목 상태인지 여부를 평가하는 데 도움이 될 수 있습니다.

Visual Studio 프로파일러에서는 추적 수집 및 보기를 모두 지원합니다. 프로파일러가 dotnet-trace와 같은 다른 도구에서 이전에 수집한 추적을 볼 수도 있습니다. Dotnet 추적은 계측된 추적이 아닌 샘플링 결과를 생성합니다. 자세한 정보는 dotnet-trace을 참조하세요.

진단 도구 호출자 수신자

관심 있는 함수를 클릭하면 창 중간에 선택한 함수, 왼쪽의 호출 함수, 오른쪽에 호출된 함수가 있는 보다 자세한 3개 창 "나비형" 보기가 표시됩니다. 함수 본문 섹션에는 호출 및 호출된 함수에 소요된 시간을 제외하고 함수 본문에 소요된 총 시간(및 시간 비율)이 표시됩니다. 이 데이터는 함수 자체가 성능 병목 상태인지 여부를 평가하는 데 도움이 될 수 있습니다.

진단 도구 호출자 수신자

메모리 사용량 분석

진단 도구 창을 사용하면 메모리 사용량 도구를 사용하여 앱에서 메모리 사용량을 평가할 수도 있습니다. 예를 들어 힙의 객체 수와 크기를 확인할 수 있습니다. 디버거 통합 메모리 사용량 도구 또는 성능 프로파일러의 사후 메모리 사용량 도구 사용할 수 있습니다.

.NET 개발자는 .NET 개체 할당 도구 또는 메모리 사용량 도구 중에서 선택할 수 있습니다.

  • .NET 개체 할당 도구를 사용하면 .NET 코드에서 할당 패턴 및 변칙을 식별하고 가비지 수집과 관련된 일반적인 문제를 식별할 수 있습니다. 이 도구는 사후 분석 도구로만 실행됩니다. 로컬 또는 원격 컴퓨터에서 이 도구를 실행할 수 있습니다.
  • 메모리 사용량 도구는 일반적으로 .NET 앱에서 일반적이지 않은 메모리 누수 식별에 유용합니다. 코드 단계별 실행과 같이 메모리를 확인하는 동안 디버거 기능을 사용해야 하는 경우 디버거 통합 메모리 사용량 도구를 사용하는 것이 좋습니다.

메모리 사용량 도구를 사용하여 메모리 사용량을 분석하려면 하나 이상의 메모리 스냅샷을 만들어야 합니다. 종종 메모리를 분석하는 가장 좋은 방법은 두 개의 스냅샷을 사용하는 것입니다. 의심되는 메모리 문제 바로 앞의 첫 번째 및 의심되는 메모리 문제가 발생한 직후의 두 번째 스냅샷입니다. 그런 다음 두 스냅샷의 차이와 변경된 내용을 정확하게 확인할 수 있습니다. 다음 그림에서는 디버거 통합 도구를 사용하여 스냅샷을 만드는 방법을 보여 줍니다.

진단 도구에서 스냅샷 만들기

진단 도구에서 스냅샷 찍기

화살표 링크 중 하나를 선택하면 힙의 차등 보기가 제공됩니다(빨간색 위쪽 화살표 메모리 사용량 증가 증가하는 개체 수(왼쪽) 또는 증가하는 힙 크기(오른쪽)를 표시합니다. 오른쪽 링크를 클릭하면 힙 크기가 가장 많이 증가한 개체에 따라 차등 힙 보기가 정렬됩니다. 이렇게 하면 메모리 문제를 정확히 파악할 수 있습니다. 예를 들어 아래 그림에서 ClassHandlersStore 개체에서 사용하는 바이트는 두 번째 스냅샷에서 3,492바이트 증가했습니다.

진단 도구 힙 차이 보기

진단 도구 힙 차이 보기

메모리 사용량 보기에서 왼쪽의 링크를 클릭하면 힙 보기가 개체 수별로 구성됩니다. 개수가 가장 많이 증가한 특정 형식의 개체가 맨 위에 표시됩니다(Count Diff 열을 기준으로 정렬됨).

계측

계측 도구는 CPU 사용률 대신 정확한 호출 수와 벽시계 시간을 제공한다는 점을 제외하고 CPU 사용량 도구와 유사합니다. 계측 방법에는 CPU 사용량 도구보다 오버헤드가 더 많이 필요합니다. 이 도구는 성능 프로파일러에서 사용할 수 있습니다. 디버그>성능 프로파일러(또는 Alt + F2 )을 선택하여 성능 프로파일러를 엽니다. 자세한 내용은 계측참조하십시오.

.NET 계측 데이터를 보여 주는 스크린샷

파일 I/O 검사

파일 I/O 도구 파일 I/O 작업을 최적화하여 앱의 성능을 향상시키는 방법을 이해하는 데 도움이 됩니다. 느린 로드 시간을 조사하고 진단하려는 경우 새 파일 IO 도구를 사용하여 I/O 작업이 소요된 시간에 미치는 영향을 이해할 수 있습니다. 이 도구는 성능 프로파일러에서 사용할 수 있습니다. 디버그 > 성능 프로파일러(또는 Alt + F2)를 선택하여 성능 프로파일러를 엽니다.

이 도구는 탭 목록 보기에서 파일 읽기 및 파일 쓰기 작업을 보여 줍니다.

파일 IO 도구가 중지된 것을 보여주는 스크린샷

PerfTips를 사용하여 성능 검사

가장 쉬운 방법으로 성능 정보를 보려면 PerfTips를 사용하는 것입니다. PerfTips를 사용하면 코드와 상호 작용하는 동안 성능 정보를 볼 수 있습니다. 이벤트 기간(디버거가 마지막으로 일시 중지된 시점 또는 앱이 시작된 시점)과 같은 정보를 확인할 수 있습니다. 예를 들어 코드(F10, F11)를 단계별로 실행하는 경우 PerfTips는 이전 단계 작업의 앱 런타임 기간을 현재 단계로 표시합니다.

성능 설명 스크린샷

성능 설명 스크린샷

PerfTips를 사용하여 코드 블록을 실행하는 데 걸리는 시간 또는 단일 함수가 완료되는 데 걸리는 시간을 검사할 수 있습니다.

PerfTips는 진단 도구의 이벤트 보기에도 표시되는 동일한 이벤트를 표시합니다. 이벤트 보기에서는 디버깅하는 동안 발생하는 다양한 이벤트(예: 중단점 설정 또는 코드 단계별 실행 작업)를 볼 수 있습니다.

진단 도구 이벤트 보기의 스크린샷

진단 도구 이벤트 보기의 스크린샷

메모

Visual Studio Enterprise가 있는 경우 이 탭에서 IntelliTrace 이벤트를 볼 수도 있습니다.

비동기 코드 분석(.NET)

.NET 비동기 도구 애플리케이션에서 비동기 코드의 성능을 분석할 수 있습니다. 이 도구는 성능 프로파일러에서 사용할 수 있습니다. 디버그>성능 프로파일러(또는 Alt + F2 )을 선택하여 성능 프로파일러를 엽니다.

이 도구는 목록 보기의 각 비동기 작업을 보여줍니다. 비동기 작업의 시작 시간, 종료 시간 및 총 시간과 같은 정보를 볼 수 있습니다.

.NET 비동기 도구 중지

이 도구는 .NET Core 및 .NET 5+ 앱에 대해 지원됩니다.

비동기 코드 분석(.NET)

.NET 비동기 도구 애플리케이션에서 비동기 코드의 성능을 분석할 수 있습니다. 이 도구는 성능 프로파일러에서 사용할 수 있습니다. 디버그>성능 프로파일러(또는 Alt + F2 )을 선택하여 성능 프로파일러를 엽니다.

이 도구는 목록 보기의 각 비동기 작업을 보여줍니다. 비동기 작업의 시작 시간, 종료 시간 및 총 시간과 같은 정보를 볼 수 있습니다.

.NET 비동기 도구 중지

이 도구는 .NET Core 및 .NET 5+ 앱에 대해 지원됩니다.

데이터베이스 성능 분석(.NET)

ADO.NET 또는 Entity Framework Core를 사용하는 .NET Core 및 .NET 5+ 앱의 경우 데이터베이스 도구 진단 세션 중에 애플리케이션이 수행하는 데이터베이스 쿼리를 기록할 수 있습니다. 그런 다음 개별 쿼리에 대한 정보를 분석하여 앱의 성능을 향상시킬 수 있는 위치를 찾을 수 있습니다. 이 도구는 성능 프로파일러에서 사용할 수 있습니다. 디버그>성능 프로파일러(또는 Alt + F2 )을 선택하여 성능 프로파일러를 엽니다.

이 도구는 목록 보기의 각 쿼리를 표시합니다. 쿼리 시작 시간 및 기간과 같은 정보를 볼 수 있습니다.

할당

.NET 카운터 시각화(.NET)

Visual Studio 2019 버전 16.7부터 Visual Studio의 .NET 카운터 도구 사용하여 성능 카운터를 시각화할 수 있습니다. dotnet 카운터를 사용하여 생성한 카운터를 시각화할 수 있습니다. dotnet counters는 CPU 사용량 및 가비지 수집기 힙 크기 등의 다양한 카운터를 지원합니다.

이 도구는 목록 보기의 각 카운터에 대한 라이브 값을 표시합니다.

.NET 카운터 도구를 수집합니다.

이 도구는 .NET Core 및 .NET 5+ 앱에 대해 지원됩니다.

애플리케이션 이벤트 검사

제네릭 이벤트 뷰어 사용하면 모듈 로드, 스레드 시작 및 시스템 구성과 같은 이벤트 목록을 통해 애플리케이션의 활동을 확인하여 Visual Studio 프로파일러 내에서 애플리케이션이 올바르게 수행되는 방식을 더 잘 진단할 수 있습니다. 이 도구는 성능 프로파일러에서 사용할 수 있습니다. 디버그>성능 프로파일러(또는 Alt + F2 )을 선택하여 성능 프로파일러를 엽니다.

이 도구는 목록 보기에서 각 이벤트를 표시합니다. 열은 이벤트 이름, 타임스탬프 및 프로세스 ID와 같은 각 이벤트에 대한 정보를 제공합니다.

이벤트 뷰어 추적

타임라인 그래프에서 사용자 지정 이벤트 보기

CPU 사용률 및 메모리 사용량 타임라인 그래프와 같은 타임라인 그래프에 아이콘으로 표시되는 사용자 지정 이벤트를 프로그래밍 방식으로 만들 수 있습니다. 자세한 내용은 타임라인 사용자 표시 추가참조하세요.

리소스 사용량 분석(XAML)

Windows 데스크톱 WPF 앱 및 UWP 앱과 같은 XAML 앱에서는 애플리케이션 타임라인 도구를 사용하여 리소스 소비를 분석할 수 있습니다. 예를 들어 애플리케이션에서 UI 프레임(레이아웃 및 렌더링), 서비스 네트워크 및 디스크 요청, 애플리케이션 시작, 페이지 로드 및 창 크기 조정과 같은 시나리오에서 소요된 시간을 분석할 수 있습니다. 이 도구를 사용하려면 성능 프로파일러에서 애플리케이션 타임라인 선택한 다음 시작선택합니다. 앱에서 리소스 사용 문제가 의심되는 시나리오를 살펴보고 컬렉션 중지 선택하여 보고서를 생성합니다.

시각적 처리량 그래프의 낮은 프레임 속도는 앱을 실행할 때 표시되는 시각적 문제에 해당할 수 있습니다. 마찬가지로 UI 스레드 사용률 그래프의 높은 숫자는 UI 응답성 문제에 해당할 수도 있습니다. 보고서에서 성능 문제가 의심되는 기간을 선택한 다음 타임라인 세부 정보 보기(아래쪽 창)에서 자세한 UI 스레드 작업을 검사할 수 있습니다.

애플리케이션 타임라인 프로파일링 도구

애플리케이션 타임라인 프로파일링 도구

타임라인 세부 정보 보기에서 활동 기간과 함께 활동 유형(또는 관련된 UI 요소)과 같은 정보를 찾을 수 있습니다. 예를 들어 그림에서 그리드 컨트롤에 대한 Layout 이벤트는 57.53ms를 사용합니다.

자세한 내용은 애플리케이션 타임라인 참조하세요.

UWP(UI 성능 및 접근성 이벤트) 검사

UWP 앱의 진단 도구 창에서 UI 분석 사용하도록 설정할 수 있습니다. 이 도구는 일반적인 성능 또는 접근성 문제를 검색하고 디버깅하는 동안 이벤트 보기에 표시합니다. 이벤트 설명은 문제를 해결하는 데 도움이 되는 정보를 제공합니다.

진단 도구에서 UI 분석 이벤트 보기

진단 도구에서 UI 분석 이벤트 보기

GPU 사용량 분석(Direct3D)

Direct3D 앱(Direct3D 구성 요소는 C++에 있어야 합니다)에서 GPU에 대한 작업을 검사하고 성능 문제를 분석할 수 있습니다. 자세한 내용은 GPU 사용량 참조하세요. 도구를 사용하려면 성능 프로파일러에서 GPU 사용량 선택한 다음 시작선택합니다. 앱에서 프로파일링에 관심이 있는 시나리오를 살펴보고 컬렉션 중지 선택하여 보고서를 생성합니다.

그래프에서 기간을 선택하고 보기 세부 정보선택하면 아래쪽 창에 자세한 보기가 나타납니다. 자세한 보기에서는 각 CPU 및 GPU에서 발생하는 작업의 양을 검사할 수 있습니다. 가장 낮은 창에서 이벤트를 선택하여 타임라인에서 팝업을 가져옵니다. 예를 들어 Present 이벤트를 선택하면 Present 호출 팝업을 확인합니다. (연한 회색 세로 VSync 줄을 참조로 사용하여 특정 Present 호출이 VSync를 누락했는지 여부를 파악할 수 있습니다. 앱이 꾸준히 60FPS에 도달하려면 두 VSync 간에 하나의 present 호출이 있어야 합니다.)

GPU 사용량 프로파일링 도구

GPU 사용량 분석 도구

그래프를 사용하여 CPU 바인딩 또는 GPU 바인딩된 성능 병목 현상이 있는지 여부를 확인할 수도 있습니다.

성능 분석(레거시 도구)

Visual Studio 2019에서는 성능 프로파일러와 같은 레거시 성능 탐색기 및 관련 프로파일링 도구가 성능 프로파일러로 폴딩되어 디버그>성능 프로파일러사용하여 열 수 있습니다. 성능 프로파일러에서 사용 가능한 진단 도구는 선택한 대상과 현재 열려 있는 시작 프로젝트에 따라 달라집니다. CPU 사용량 도구는 성능 마법사에서 이전에 지원되었던 샘플링 기능을 제공합니다. 계측 도구는 성능 마법사에 있던 계측된 프로파일링 기능(정확한 호출 수 및 기간)을 제공합니다. 성능 프로파일러에도 추가 메모리 도구가 표시됩니다.

성능 탐색기 도구성능 탐색기