다음을 통해 공유


Visual Studio에서 .NET 애플리케이션 계측(C#, C++, Visual Basic, F#)

Visual Studio 2022 버전 17.5 릴리스에서는 새 동적 계측 도구를 사용할 수 있습니다. 이 도구는 함수가 호출된 정확한 횟수를 보여주며, 이전 버전의 계측 도구보다 더 빠릅니다. 이 도구는 PDB 없이 .NET Core 계측을 지원합니다. Visual Studio 2022 버전 17.6 미리 보기 2부터 이 도구는 C/C++도 지원합니다.

이 도구는 CPU 사용률 대신 벽시계 시간을 기반으로 하는 것을 제외하고는 CPU 사용량 도구와 유사합니다. 즉, 잠금을 기다리는 데 걸린 시간과 같은 차단된 시간이 CPU 사용량 도구와 달리 계측 추적에 표시됩니다. 계측 도구를 효과적으로 사용하는 방법에 대한 추가 정보를 원하시면 계측 개요사례 연구: 성능 문제 격리를 참조하세요.

애플리케이션을 계측하세요

  1. Visual Studio 프로젝트에서 솔루션 구성을 릴리스 로 설정하고 배포 대상을 선택합니다.

    배포 대상은 일반적으로 로컬 배포를 나타내는 프로젝트 이름과 일치합니다.

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

  3. 계측 확인란을 선택합니다.

    스크린샷 - 계측 도구가 선택된 상태입니다.

    프로파일러를 시작하기 전에 컬렉션 일시 중지 옵션을 사용하도록 설정하면 진단 세션 보기에서 레코드 단추를 선택할 때까지 데이터가 수집되지 않습니다.

    메모

    도구를 선택할 수 없는 경우 일부 도구는 단독으로 실행해야 하므로 다른 모든 도구의 확인란을 선택 취소합니다. 도구를 함께 실행하는 방법에 대한 자세한 내용은 동시에여러 프로파일러 도구 사용을 참조하세요.

    도구를 계속 사용할 수 없는 경우 프로젝트가 이전 요구 사항을 충족하는지 확인합니다. 프로젝트가 릴리스 모드에 있는지 확인하여 가장 정확한 데이터를 캡처합니다.

    CMake와 같은 일부 프로젝트 형식의 경우 시작 대상을 실행 파일로 설정해야 합니다. 자세한 내용은 내 프로젝트에 지원되는 도구는 무엇인가요?를 참조하세요.

  4. 시작 단추를 선택하여 도구를 실행합니다.

  5. 계측할 프로그램의 항목을 선택합니다.

    계측할 항목 선택 대화 상자를 보여 주는 스크린샷

    Visual Studio 2022 버전 17.11부터 프로파일러가 다음 프로파일링 실행에 대해 선택한 항목을 유지합니다.

    Visual Studio 2022 버전 17.13 미리 보기 1부터 C++용 계측할 항목을 선택할 수 있습니다.

  6. 확인선택합니다.

  7. 도구가 실행되기 시작한 후 앱에서 프로파일을 지정할 시나리오를 진행합니다. 그런 다음 컬렉션 중지를 선택하거나 앱을 닫아 데이터를 확인합니다.

계측 보고서 분석

프로파일링 데이터가 Visual Studio에 표시됩니다.

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

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

관심 있는 함수를 클릭하면 더 자세한 보기가 표시됩니다.

사용 가능한 데이터는 CPU 사용률 도구와 유사합니다. 단, CPU 사용률 대신 벽시계 시간 및 호출 수를 기반으로 합니다.

인사이트 분석

Top Insights 섹션에 인사이트가 표시되는 경우 제공된 링크를 사용하여 식별된 문제에 대한 자세한 정보를 가져옵니다. 자세한 내용은 CPU 인사이트참조하지만 계측 도구에 대한 정보는 CPU 사용률이 아닌 벽시계 시간에만 적용됩니다.

AI 지원 받기

코필로트가 있는 경우 최고의 인사이트를 살펴보는 동안 AI 지원을 받을 수 있습니다. Copilot는 특정 성능 인사이트 집합과 관련된 정보 및 인사이트를 제공합니다. Copilot를 사용하면 코드에서 식별된 핫 경로의 함수에 대해 질문할 수도 있습니다. 이를 통해 보다 효율적이거나 비용 효율적인 코드를 생성하는 데 도움이 될 수 있습니다.

코필로트 요청단추 스크린샷. 특정 성능 인사이트가 식별되지 않은 경우에도 나타납니다. 코필로트에게 물어보기를 선택하여 코필로트에서 배우고 질문을 시작합니다.

계측 세부 보고서 분석

계측 보고서에 대한 심층 분석을 위해 먼저 자세한 보고서 보기 중 하나를 엽니다.

  1. 보고서의 요약 페이지에서 [세부 정보 열기 ]를 클릭하거나 최상위 함수 중 하나를 선택하여 함수 보기를 엽니다.

    세부 정보 열기 링크를 보여 주는 스크린샷.

  2. 현재 보기 목록에서 자세한 보고서 보기 중 하나를 선택할 수 있습니다.

    자세한 보고서 목록을 보여 주는 스크린샷

다음 표에서는 자세한 뷰에 대한 설명을 제공합니다.

보기 설명
호출자/호출 수신자 특정 함수에서 소요된 시간, 이를 호출한 함수 및 호출하는 함수에 대한 자세한 보기입니다. 성능 데이터는 데이터 수집 기간 동안 집계됩니다. 호출 함수와 피호출 함수를 선택하여 호출 경로를 탐색할 수 있습니다.
호출 트리 함수 호출 경로의 계층적 뷰입니다. 가장 많은 시간(핫 경로)을 사용하는 호출 경로를 식별하는 데 사용됩니다.
모듈 데이터 수집 기간 동안 집계된 개별 모듈에서 소요된 시간을 봅니다. 높은 호출 수 및/또는 성능 문제의 조합으로 인해 성능 병목 상태일 수 있는 모듈을 식별하는 데 사용됩니다.
함수 데이터 수집 기간 동안 집계된 개별 함수에서 소요된 시간을 봅니다. 높은 호출 수 및/또는 성능 문제의 조합으로 인해 성능 병목 상태일 수 있는 함수를 식별하는 데 사용됩니다.
화염 그래프 화염 그래프 시각화에서 함수 호출 경로의 계층적 뷰입니다. 가장 많은 시간(핫 경로)을 사용하는 호출 경로를 식별하는 데 사용됩니다.

발신자/수신자 보기를 제외한 모든 진단 보고서에서는 총합 [단위, %]을 기준으로 높은 순에서 낮은 순으로 정렬됩니다. 열 머리글을 선택하여 정렬 순서 또는 정렬 열을 변경합니다. 관심 있는 함수를 두 번 클릭하면 함수의 원본과 해당 함수에서 소요되는 시간을 보여 주는 강조 표시가 표시됩니다. 이 표는 호출된 함수를 포함한 함수 내 소요 시간(합계)을 보여주는 열과 호출된 함수를 제외한 함수 자체에서의 소요 시간(자체)을 보여주는 두 번째 열로 구성되어 있습니다.

이 데이터는 함수 자체가 성능 병목 상태인지 여부를 평가하는 데 도움이 될 수 있습니다. 타사 코드 또는 런타임 라이브러리가 엔드포인트가 느리거나 리소스 사용량이 많은 이유인지 확인하기 위해 메서드가 표시하는 데이터의 양을 결정합니다.

화염 그래프 사용에 대한 자세한 내용은 불꽃 그래프사용하여 핫 경로 식별을 참조하세요.

계측 호출 트리

호출 트리를 보려면 보고서에서 부모 노드를 선택합니다. 기본적으로 계측 페이지가 호출자/호출 수신자 보기로 열립니다. 현재 보기 드롭다운에서 호출 트리를 선택합니다. 호출 트리 보기를 사용하면 성능 병목 상태를 빠르게 식별할 수 있습니다.

핫 경로 확장 클릭하고 핫 경로 표시 단추를 클릭하여 호출 트리 보기에서 가장 많은 벽시계 시간을 사용하는 함수 호출을 볼 수 있습니다.

호출 트리 구조를 보여 주는 스크린샷

열 값에 대한 자세한 내용은 다음과 같습니다.

  • Total 함수에 소요된 시간과 함수가 호출한 함수를 나타냅니다. 높은 값은 가장 많은 클록 시간을 사용하는 함수를 가리킵니다.

  • 자체 함수 본문에서 호출된 모든 함수에서 소요된 시간을 제외하고 함수 본문에 소요된 시간을 나타냅니다. 높은 자체 값은 함수 자체 내에서 성능 병목 상태를 나타낼 수 있습니다.

  • 호출 개수 함수가 호출되는 횟수를 나타냅니다.

  • 모듈 함수를 포함하는 모듈의 이름입니다.

호출 트리에서 예기치 않은 데이터를 이해하는 데 도움이 되도록 호출 트리 이해를 참조하세요.

.NET의 계측 호출 트리에서의 비동기 호출

Visual Studio 2022 버전 17.13 미리 보기 2부터 시각적 호출 트리를 나타내는 보기는 비동기 호출이 수행된 함수 아래에 .NET 비동기 호출을 중첩하여 단일 통합 스택 추적 내에서 실행 흐름을 더 쉽게 추적할 수 있도록 합니다. 이렇게 하면 성능 병목 상태를 빠르게 식별할 수 있습니다.

통합 스택 추적은 호출 트리 보기 및 요약 페이지의 핫 경로 섹션에 표시됩니다. 비동기 노드는 [비동기 호출] 설명자와 함께 표시됩니다.

비동기 호출에 대한 호출 트리 구조를 보여 주는 스크린샷

프로파일러 요약 보기의 필터 옵션에서 스티치 비동기 스택 선택하여 함께 연결된 비동기 호출 스택의 표시를 전환할 수 있습니다. 기본 설정은 활성화입니다.

비동기 스택 옵션을 보여 주는 스크린샷