프로파일러 성능 수집 방법 이해

이 문서에서는 Visual Studio 성능 프로파일러 내의 도구에서 사용하는 데이터 수집 방법에 대해 간략하게 설명합니다.

샘플링

샘플링은 프로파일링 중에 애플리케이션이 수행하는 작업에 대한 통계 데이터를 수집하며 애플리케이션 속도를 개선할 영역을 찾기 위한 좋은 출발점입니다. 샘플링 방법은 응용 프로그램에서 실행되는 함수에 대한 정보를 지정된 간격으로 수집합니다. 데이터 수집은 정기적으로 또는 밀리초 단위 같은 샘플링 빈도로 애플리케이션에 대한 정보를 수집하여 이루어집니다. 수집된 데이터는 분석되어 애플리케이션에서 시간이 소요된 위치의 모델을 만듭니다. 호출 시간을 정확하게 측정해야 하거나 처음으로 애플리케이션에서 성능 문제를 찾는 경우 샘플링을 사용할 수 있습니다.

샘플링은 호출 수의 정확도가 낮지만 프로파일러 비용이 낮으며 프로파일링되는 애플리케이션의 실행에 거의 영향을 미치지 않습니다. 샘플링 방법을 활용하는 성능 프로파일러 도구에는 CPU 사용량 도구가 포함됩니다.

데이터 수집을 완료하면 CPU 사용량 도구가 캡처된 데이터를 분석하고 보고서를 표시합니다.

추적

추적은 메서드가 실행된 빈도에 대한 더 나은 정보를 제공합니다. 정확한 호출 수 측정값이 필요한 경우 추적을 사용합니다. 추적은 수집이 코드 성능에 미치는 영향이 더 클 수 있지만 샘플링은 약간의 오버헤드만 있습니다. 또한 추적은 수집 후 데이터를 보는 데 더 오래 걸리기 때문에 분석 속도가 느려질 수 있습니다.

계측

계측 프로파일링은 프로파일링 실행 중에 애플리케이션이 수행하는 작업에 대한 자세한 정보를 수집합니다. 데이터 수집은 타이밍 정보를 캡처하는 이진 파일에 코드를 삽입하는 도구를 통해 또는 애플리케이션이 실행되는 동안 정확한 타이밍 및 호출 수 정보를 수집하고 내보내는 데 콜백 후크를 사용하여 수행됩니다. 계측 방법은 샘플링 기반 접근 방법과 비교할 때 오버헤드가 높습니다. 성능 프로파일러에서 계측을 사용하는 도구에는 계측 도구 및 .NET 개체 할당 도구가 포함됩니다.

샘플링과 계측

샘플링의 가치는 오버헤드가 적기 때문에 프로덕션에서 실행되는 애플리케이션을 통계적으로 대표할 가능성이 더 높다는 것입니다. 계측 프로파일링의 가치는 함수가 호출된 정확한 횟수를 얻을 수 있다는 것입니다. 따라서 일반 샘플링보다 훨씬 더 자세한 정보가 제공되므로 일부 시나리오에서 소요되는 시간이 왜곡될 수 있습니다. 예를 들어 많은 작업을 수행하지 않지만 자주 호출되는 함수는 실제 시나리오에서보다 많이 표시됩니다.

계측을 사용하면 애플리케이션에서 선택한 모든 함수 호출에 주석이 추가되고 계측되므로 함수가 호출될 때 호출자에 대한 정보와 함께 추적에 추가됩니다. 샘플링을 사용하면 현재 호출 스택 실행이 CPU에서 일정 주기로 폴링된 다음 각 프레임이 추적에 추가됩니다.