Visual Studio는 앱 유형에 따라 다양한 종류의 앱 성능 문제를 진단하는 데 도움이 되는 다양한 프로파일링 도구를 제공합니다. 이 문서에서는 시나리오 및 애플리케이션 유형에 적합한 도구를 찾는 데 도움이 되는 정보를 제공합니다.
프로파일링 도구를 사용하여 코드를 최적화하는 일반적인 방법은 사례 연구: 코드최적화에 대한 초보자 가이드를 참조하세요.
어떤 도구를 사용해야 하나요?
다음 표에서는 Visual Studio에서 제공하는 다양한 도구를 나열하고 도구를 선택하는 일반적인 시나리오를 제공합니다.
| 성능 도구 | 묘사 | 도구를 언제 사용해야 합니까? |
|---|---|---|
| CPU 사용량 | CPU에서 시간을 소비하는 위치를 표시합니다. | • 일반적인 성능 문제에 대한 조사를 시작합니다. • 높은 서버 CPU 사용량을 조사합니다. • 주문이 소매 웹 사이트를 통과하지 못하는 경우와 같은 DevOps 시나리오를 조사합니다. • CPU 사용량을 최적화합니다. • API 호출의 대기 시간을 조사합니다. |
| 불꽃 그래프 | 호출 트리의 대체 시각화를 제공하는 CPU 사용량 도구 내의 보기입니다. | API 호출의 대기 시간 조사 |
| 핫 경로 | CPU 사용량 도구 내에서 애플리케이션에서 대부분의 CPU 시간이 소요된 위치를 보여 줍니다. | API 호출의 대기 시간 조사 |
| 메모리 사용량 | 메모리 누수와 같은 문제를 찾으려면 앱의 메모리를 표시합니다. | • 메모리 사용 최적화 • UI 멈춤 조사 • 의심되는 메모리 누수 조사(네이티브 코드) |
| .NET 개체 할당 | .NET 개체가 할당되는 위치와 가비지 수집에 대한 정보를 표시합니다. | • .NET 메모리 사용 최적화 • 가비지 컬렉션 분석 |
| 계측 | 정확한 호출 수 및 통화 시간을 표시합니다. | • CPU 사용량과 같은 도구가 필요하지만 벽시계 시간에 따라 함수에 소요된 정확한 호출 수와 시간을 원합니다. • 잠금을 기다리는 데 걸린 시간과 같이 차단된 시간을 확인하려고 합니다. • 참고: 이 도구에는 추가 오버헤드가 필요합니다. |
| .NET 카운터 | .NET 카운터에 대한 라이브 보고서입니다. | • 일반적인 성능 문제에 대한 조사를 시작합니다. • 초당 예외, 가비지 수집 및 CPU 사용률과 같은 .NET 카운터 기반 메트릭에 대한 추적을 원합니다. |
| BenchmarkDotNet | BenchmarkDotNet을 기반으로 하는 벤치마크에 대한 보고서입니다. | • 사용 중인 진단자를 기반으로 CPU 사용량 또는 메모리 할당과 같은 BenchmarkDotNet 수집 데이터의 다양한 시각화를 가져옵니다. |
| 파일 I/O | 파일 I/O 작업과 그 소요 시간 및 처리하는 데이터 양을 보여 줍니다. | UI 정지 조사 |
| 성능 설명 | 코드와 상호 작용하는 동안 성능 정보의 빠른 측정을 보여 줍니다. | 디버깅하는 동안 이전 단계 작업(또는 중단점)과 현재 단계 또는 중단점 사이의 경과된 시간을 확인하려고 합니다. |
| 이벤트 뷰어 | HTTP 요청, 로그 메시지 및 예외를 표시합니다. | • API 호출의 대기 시간 조사 • 원격 웹 서버에서 실행 중인 느린 애플리케이션 조사 |
| .NET 비동기 | .NET 앱에서 비동기/대기 사용량을 표시합니다. | 비동기 코드로 의심되는 성능 문제를 조사합니다. |
| 데이터베이스 | 데이터베이스 쿼리의 성능을 보여 줍니다. | ADO.NET 또는 Entity Framework Core를 사용하는 데이터베이스 쿼리의 성능을 조사합니다. |
| GPU 사용량 | Direct3D 앱의 높은 수준의 하드웨어 사용량을 보여 줍니다. | 앱의 성능이 CPU 바인딩인지 GPU 바인딩인지 확인합니다. |
| 애플리케이션 타임라인 | XAML 앱의 UI 성능을 보여 줍니다. | 프레임 렌더링에 소요된 시간과 같은 XAML 앱의 UI 성능을 조사합니다. |
| IntelliTrace | 이벤트를 기록하고 다양한 실행 지점에서 애플리케이션 상태를 검사할 수 있는 디버거 도구입니다. | 도구가 현재 애플리케이션 상태뿐만 아니라 다양한 지점에서 애플리케이션 상태를 검사하려고 합니다. |
내 프로젝트에 지원되는 도구는 무엇인가요?
다음 표에는 Visual Studio에서 제공하는 다양한 도구와 사용할 수 있는 다양한 프로젝트 유형이 나와 있습니다.
| 성능 도구 | 닷넷 | C/C++ | 유니버설 윈도우 플랫폼 (UWP) | ASP.NET/ASP.NET Core |
|---|---|---|---|---|
| CPU 사용량 | 예 | 예 | 예 | 예 |
| 메모리 사용량 | 예 | 예 | 예 | 예 |
| .NET 개체 할당 | 예 | 아니요 | 예 | 예 |
| 계측 | 예 | 예 | 예 | 예 |
| .NET 카운터 | 예(.NET Core/5 이상만 해당) | 아니요 | 아니요 | 예(ASP.NET Core에만 해당) |
| BenchmarkDotNet | 예 | 아니요 | 아니요 | 부분 |
| 파일 I/O | 예 | 예 | 예 | 예 |
| 성능 설명 | 예 | 예 | 예 | 예 |
| 이벤트 뷰어 | 예 | 예 | 예 | 예 |
| .NET 비동기 | 예 | 아니요 | 예 | 예 |
| 데이터베이스 | 예(.NET Core/5 이상만 해당) | 아니요 | 아니요 | 예(ASP.NET Core에만 해당) |
| GPU 사용량 | 예 | 예 | 예 | 아니요 |
| 애플리케이션 타임라인 | 예(XAML) | 아니요 | 예 | 아니요 |
| 성능 탐색기 | 아니요 | 아니요 | 아니요 | 아니요 |
| IntelliTrace | Visual Studio Enterprise와 함께 사용하는 .NET | 아니요 | Visual Studio Enterprise와 함께 사용하는 .NET | Visual Studio Enterprise와 함께 사용하는 .NET |
CMake 프로젝트에 대한 지원은 C++와 동일합니다. CPU 사용량, 메모리 사용량, 파일 I/O 및 이벤트 뷰어의 경우 시작 프로젝트에 대해 프로파일링 도구를 실행할 수 있습니다. 그러나 계측 및 GPU 사용의 경우 실행 파일을 시작 프로젝트로 선택하여 성능 프로파일러( + F2)에서 실행 파일을 대상으로 설정해야 합니다.
CMake 프로젝트에 대한 지원은 C++와 동일합니다. 그러나 실행 파일을 시작 프로젝트로 선택하여 성능 프로파일러( + F2)에서 실행 파일을 대상으로 설정해야 합니다.
Linux에서 지원되는 도구는 무엇입니까?
다음 도구는 Windows뿐만 아니라 대상 플랫폼으로 Linux 또는 WSL에서 지원됩니다.
- CPU 사용량
- .NET 개체 할당 추적
- .NET 비동기
- .NET 성능 카운터
- BenchmarkDotNet
- 이벤트 뷰어
- 데이터베이스
프로파일러 사용 알아보기
다음 문서 및 블로그 게시물은 Visual Studio 성능 도구를 효과적으로 사용하는 방법을 배우는 데 도움이 되는 자세한 정보를 제공합니다.
- 사례 연구: 코드 최적화에 대한 초보자 가이드
- 사례 연구: 성능 문제 격리하기
- 새 계측 도구 사용하여 Visual Studio 성능 향상
- 사례 연구: 30분 미만의 두 배 성능