다음을 통해 공유


연습: 응용 프로그램 프로파일링

업데이트: 2007년 11월

이 연습에서는 응용 프로그램을 프로파일링하여 성능 문제를 파악하는 방법을 보여 줍니다.

이 연습에서는 관리되는 응용 프로그램을 프로파일링하는 절차와, 샘플링 및 계측을 사용하여 응용 프로그램의 성능 문제를 격리하고 파악하는 절차를 단계별로 보여 줍니다.

이 연습에서는 다음 단계를 수행합니다.

  • 샘플링 방법을 사용하여 응용 프로그램을 프로파일링합니다.

  • 샘플링한 프로파일링 결과를 분석하여 성능 문제를 찾아 해결합니다.

  • 계측 방법을 사용하여 응용 프로그램을 프로파일링합니다.

  • 계측한 프로파일링 결과를 분석하여 성능 문제를 찾아 해결합니다.

사전 요구 사항

프로파일링으로 제공된 정보를 사용하여 작업할 때는 디버깅 기호 정보도 필요합니다.

샘플링 방법을 사용하여 프로파일링

샘플링은 문제의 프로세스가 주기적으로 폴링되어 활성 함수를 확인하는 프로파일링 방법입니다. 결과 데이터에서는 프로세스가 샘플링될 때 문제의 함수가 호출 스택 맨 위에 오는 간격을 알 수 있습니다.

샘플링 방법을 사용하여 응용 프로그램을 프로파일링하려면

  1. Microsoft Visual Studio 2005에서 PeopleTrax 솔루션을 엽니다.

    솔루션 탐색기에 PeopleTrax 솔루션이 열립니다.

  2. 분석 메뉴에서 성능 마법사 시작을 클릭합니다.

    성능 마법사가 나타납니다.

  3. 사용 가능한 대상 드롭다운 목록에서 PeopleTrax를 선택하고 다음을 클릭합니다.

  4. 샘플링을 클릭하고 다음을 클릭합니다.

  5. 마침을 클릭합니다.

  6. 프로젝트 구성 설정을 릴리스로 설정합니다.

    릴리스 빌드를 사용하여 응용 프로그램의 성능 문제를 탐지하는 것이 좋습니다.

    디버그 빌드에는 성능에 나쁜 영향을 줄 수 있는 추가 정보가 컴파일되어 있고 성능 문제가 정확히 표시되지 않을 수 있으므로 프로파일링에는 릴리스 빌드를 사용하는 것이 좋습니다.

    릴리스 빌드에서는 기호 정보가 자동으로 표시되지 않습니다. 프로파일러 성능 보고서에 기호 정보가 나타나도록 빌드를 구성하려면 /Z7, /Zi, /ZI(디버깅 정보 형식)¹æ¹ý: Windows ±âÈ£ Á¤º¸ ÂüÁ¶을를 참조하십시오.

  7. 성능 탐색기 도구 모음에서 시작을 클릭합니다.

    Visual Studio 2005에서 프로젝트를 빌드하고 응용 프로그램 프로파일링을 시작합니다. PeopleTrax 응용 프로그램 창이 나타납니다.

  8. Get People을 클릭합니다.

  9. 데이터내보내기를 클릭합니다.

    메모장이 열리고, PeopleTrax에서 내보낸 데이터가 포함된 새 파일이 메모장에 표시됩니다.

  10. 메모장을 닫고 PeopleTrax 응용 프로그램을 닫습니다.

    Visual Studio 2005에서 성능 세션 보고서(*.vsp)를 생성하고 자동으로 로드합니다.

샘플링한 프로파일링 결과를 분석하려면

  1. 프로파일러 창 도구 모음에서 보고서 뷰 드롭다운 상자를 열고 보고서의 함수 뷰를 선택합니다.

  2. 데이터 표를 마우스 오른쪽 단추로 클릭하고 열 추가/제거를 클릭합니다.

    열 추가/제거 대화 상자가 나타납니다.

  3. 열 목록에서 소스 파일 이름을 선택한 다음 확인을 클릭합니다.

  4. 데이터 표에서 소스 파일 이름 열을 클릭하여 데이터 표를 정렬합니다.

    이 열을 기준으로 정렬하면 PeopleTrax 솔루션에 적용되는 모든 행이 그룹화됩니다.

  5. PeopleTrax 솔루션의 데이터가 표시된 행을 찾습니다.

    이러한 행을 조사하면 PeopleTrax 솔루션의 다른 부분에 비해 다음과 같은 함수가 더 자주 샘플링되었음을 알 수 있습니다.

    PeopleTrax.Form1.GetPeopleButton_Click

    GetPeopleButton_Click 이벤트에 초점을 둡니다.

  6. PeopleTrax.Form1.GetPeople_Click 행을 마우스 오른쪽 단추로 클릭하고 소스 보기를 클릭합니다.

    코드 편집기에 Form1.cs가 열리고 GetPeopleButton_Click 이벤트에 포인터가 나타납니다.

  7. GetPeopleButton_Click 이벤트의 소스 코드를 검토합니다.

    이 코드를 검토한 후에 최적화할 영역을 식별할 수 있습니다.

    • ListView.ListViewItemCollection 클래스의 Add 메서드를 사용하여 항목을 한 번에 하나씩 추가하는 경우 BeginUpdate 메서드를 사용하여 항목을 추가할 때마다 컨트롤에서 목록 뷰가 다시 그려지지 않게 할 수 있습니다. 컨트롤에 항목을 추가하는 작업이 끝난 후 EndUpdate 메서드를 호출하여 목록 뷰가 다시 그려지게 할 수 있습니다. 이 방법으로 항목을 추가하면 컨트롤에 많은 항목을 추가할 때 목록 뷰가 깜박이며 그려지지 않으며 목록 뷰를 채우는 데 걸리는 시간이 줄어듭니다.

      App.Config의 기본 설정은 1500개의 이름입니다.

    • 목록 뷰 항목의 전경색을 설정할 때 문자열로 색을 지정하고 Color.FromName 메서드를 호출하는 대신 KnownColor 열거형을 사용하면 성능이 향상됩니다.

    • 이 이벤트는 People.GetPeople이라는 함수를 호출하여 목록 뷰에 추가할 이름 배열을 검색합니다.

  8. GetPeople에 대한 호출을 마우스 오른쪽 단추로 클릭한 다음 정의로 이동을 클릭합니다.

    이 코드를 검토한 후에 최적화할 영역을 식별할 수 있습니다.

    • fullNames 및 companyNames의 새 배열을 검색하는 코드가 반복적으로 호출됩니다. 이러한 배열을 한 번만 만들고 다시 사용해야 합니다.

    • 문제가 있는 이러한 영역을 최적화된 코드로 대체하려면 PeopleTrax 및 People 프로젝트에 OPTIMIZED_GETPEOPLE을 조건부 컴파일 기호로 추가합니다.

  9. 솔루션 탐색기에서 PeopleTrax 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 클릭합니다.

    PeopleTrax 프로젝트 속성 폼이 나타납니다.

  10. 빌드 탭을 클릭합니다.

  11. 조건부 컴파일 기호 입력란에 OPTIMIZED_GETPEOPLE을 추가합니다.

  12. People 프로젝트에 대해 18 - 20단계를 반복합니다.

  13. 프로젝트 속성 폼을 닫은 다음 저장하라는 메시지가 나타나면 모두 저장합니다.

성능이 눈에 띄게 향상되더라도 프로파일링 세션을 다시 실행하는 것이 좋습니다. 문제를 해결한 후 데이터를 검토하여 첫 번째 문제 외에 다른 문제가 더 있는지 확인해야 합니다.

이제 계측 방법을 사용하여 응용 프로그램을 프로파일링합니다.

계측 방법을 사용하여 프로파일링

계측은 함수 시작 및 종료 시 계측된 모듈의 함수에 타이밍 정보를 수집하는 프로브 함수를 특별히 빌드된 버전의 프로파일링된 이진 파일에 포함시키는 프로파일링 방법입니다. 이 프로파일링 방법은 샘플링에 비해 간섭이 심하므로 오버헤드가 많이 발생합니다. 또한 계측된 이진 파일은 디버그 또는 릴리스 이진 파일보다 크며 개발용이 아닙니다.

계측 방법을 사용하여 기존 응용 프로그램을 프로파일링하려면

  1. 성능 탐색기의 드롭다운 목록에서 계측을 클릭합니다.

  2. 성능 탐색기 도구 모음에서 시작 단추를 클릭합니다.

    Microsoft Visual Studio 2005에서 프로젝트를 빌드하고 응용 프로그램 프로파일링을 시작합니다. PeopleTrax 응용 프로그램 창이 나타납니다.

  3. Get People을 클릭합니다.

    PeopleTrax 데이터 표에 데이터가 채워집니다.

  4. 데이터 내보내기를 클릭합니다.

    메모장이 열리고 PeopleTrax의 인물 목록이 포함된 새 파일이 메모장에 표시됩니다.

  5. 메모장을 닫고 PeopleTrax 응용 프로그램을 닫습니다.

    Microsoft Visual Studio 2005에서 성능 세션 보고서(*.vsp)를 생성합니다.

계측된 프로파일링 결과를 분석하려면

  1. 보고서의 요약 뷰에서 요약 테이블을 검토하여 가장 자주 호출되는 함수와 응용 프로그램이 가장 많이 실행되는 위치를 파악합니다.

    이 정보를 검토하면 응용 프로그램이 System.String.Concat 작업을 실행하는 데 상당한 시간을 소비했음을 알 수 있습니다.

  2. 요약 테이블 중 하나에서 System.String.Concat를 두 번 클릭합니다.

    보고서가 함수 뷰로 전환되고 System.String.Concat가 강조 표시됩니다.

  3. System.String.Concat 행을 마우스 오른쪽 단추로 클릭한 다음 Show in Caller/Callee View을 클릭합니다.

    보고서가 호출자/호출 수신자 뷰로 전환되고 PeopleTrax.Form1.ExportData에서 이 함수를 호출했음이 표시됩니다.

  4. PeopleTrax.Form1.ExportData를 마우스 오른쪽 단추로 클릭하고 소스 보기를 클릭합니다.

    코드 편집기에 Form1.cs가 열리고 ExportData 함수에 포인터가 나타납니다.

  5. ExportData 함수의 소스 코드를 검토합니다.

    이 코드를 검토하면 System.String.Concat에 대한 리터럴 호출이 없음을 알 수 있습니다. 대신 += 피연산자가 몇 번 사용되는데, 이 피연산자는 IL에서 System.String.Concat에 대한 호출로 대체됩니다. .NET Framework에서 문자열을 수정하면 새 문자열이 할당됩니다. .NET Framework에는 문자열 연결에 맞게 최적화되는 StringBuilder 클래스가 있습니다.

  6. 이 문제 영역을 최적화된 코드로 대체하려면 OPTIMIZED_EXPORTDATA를 조건부 컴파일 기호로 PeopleTrax 프로젝트에 추가합니다.

  7. 솔루션 탐색기에서 PeopleTrax 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 클릭합니다.

    PeopleTrax 프로젝트 속성 폼이 나타납니다.

  8. 빌드 탭을 클릭합니다.

  9. 조건부 컴파일 기호 입력란에 OPTIMIZED_EXPORTDATA를 추가합니다.

  10. 프로젝트 속성 폼을 닫고, 메시지가 나타나면 모두 저장을 선택합니다.

응용 프로그램을 다시 실행하면 성능이 현저히 향상되었음을 알 수 있습니다. 성능이 눈에 띄게 향상되더라도 프로파일링 세션을 다시 실행하는 것이 좋습니다. 문제를 해결한 후 데이터를 검토하여 첫 번째 문제 외에 다른 문제가 더 있는지 확인해야 합니다.

참고 항목

참조

/Z7, /Zi, /ZI(디버깅 정보 형식)

기타 리소스

프로파일링 도구 시작

개요(프로파일링 도구)