Microsoft MVP성태의 닷넷 이야기
VS.NET IDE: 89. Visual Studio에서 기본 제공되는 성능 프로파일 [링크 복사], [링크+제목 복사],
조회: 25309
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

Visual Studio에서 기본 제공되는 성능 프로파일

오~~~ 생각보다 괜찮은데요. ^^

How to profile a XAML Windows Store App
; http://blogs.msdn.com/b/visualstudioalm/archive/2013/02/27/how-to-profile-a-xaml-windows-store-app.aspx

성능 측정 방법이 매우 간단합니다. "Debug" / "Performance and Diagnostics (단축키: Alt + F2)" 메뉴를 선택하면 나오는 창에서,

cpu_prof_vs_0.png

위의 그림처럼 "CPU Usage"에 체크하고 "Start" 버튼만 누르면 됩니다. 그럼, 실행하는 동안 프로파일링을 하고 응용 프로그램을 종료하면 자동으로 산출 결과를 분석해서 보여줍니다.

저도 그래서 별 기대없이 현재 개발 중인 제니퍼 차기 버전을 대상으로 프로파일링 해봤는데요. 결과가 다음과 같이 나왔습니다.

cpu_prof_vs_1.png

그래서 GetSignature 함수를 보니... 헉... ^^; 제가 무슨 생각으로 이런 비효율적인 코드를 만들었을까요?

void GetSignature(__out_ecount(cSignature) LPWSTR wszBuf, __in int cSignature)
{
    StringBuilder sb;

    wchar_t localBuf[10] = { 0 };
    for (ULONG i = 0; i < m_cbSigBlob; i ++)
    {           
        StringCchPrintf(localBuf, 10, L"%02x ", m_sigBlob[i]);
        sb.push_back(localBuf);
    }

    StringCchCopy(wszBuf, cSignature, sb.ToString().c_str());
}

이미 메모리가 외부에서 할당되어 제공이 되므로 이 함수를 다음과 같이 바꿔주었습니다.

void GetSignature(__out_ecount(cSignature) LPWSTR wszBuf, __in size_t cSignature)
{
    if (wszBuf == nullptr || cSignature == 0)
    {
        return;
    }

    if (cSignature < (m_cbSigBlob * 3 + 1))
    {
        *wszBuf = '\0';
        return;
    }

    for (ULONG i = 0; i < m_cbSigBlob; i++)
    {
        StringCchPrintf(wszBuf + (i * 3), 3, L"%02x ", m_sigBlob[i]);
    }
}

이후 다시 프로파일링 해주니, 위의 CPU 사용률 구간이 하단으로 밀렸습니다. (즉, GetSignature에 대한 CPU 사용률이 낮아졌다는 것이지요.)

cpu_prof_vs_2.png

보시는 바와 같이 이번에는 "[External Code] 영역에서 CPU 소비가 많은 데... 이런 경우는 사실 자신이 만든 코드 내에서 프로파일링 되지 않는 Win32 함수라고 보시면 됩니다. 이 부분을 확인하려면 다음과 같이 "Tools" / "Options" 메뉴의 "Performance Tools"에서 "Just My Code" / "Enable Just My Code for profiler reports (sampling)" 옵션을 해제하면 됩니다.

cpu_prof_vs_3.png

하지만, 직접 해보니 이건... 현실성이 없는 프로파일링입니다. 왜냐하면 이 상태에서 프로파일링하면 다음과 같이 나오는데,

cpu_prof_vs_4.png

딱 봐도... 문제를 찾고 싶은 의욕을 확 떨어뜨리는 결과를 보여주고 있습니다. ^^

어쨌든 기본 프로파일링 옵션은 해볼만 할 것 같습니다. Visual C++에서도 이런 결과를 보여주니 닷넷 응용 프로그램도 효과가 좋겠지요. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 12/2/2022]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2014-07-04 12시49분
정성태
2020-07-09 11시38분
정성태

... 166  167  168  169  170  171  172  173  174  [175]  176  177  178  179  180  ...
NoWriterDateCnt.TitleFile(s)
725정성태5/21/200929625VS.NET IDE: 61. Visual Studio 2010 베타1과 Visual Studio 2008의 혼합 개발 [2]
724정성태5/19/200945300.NET Framework: 136. 자바와 닷넷의 압축 호환파일 다운로드2
723정성태5/18/200937972.NET Framework: 135. C# - Deflate, GZip, Zip
722정성태5/18/200925943개발 환경 구성: 45. SQL 서버 2008 백업 구성 [2]
721정성태5/14/200931856오류 유형: 81. Package 실행 오류 - Error 15404
720정성태5/13/200928737오류 유형: 80. SQL Server 2008 - Package 실행 오류의 구체적인 원인 확인
719정성태5/12/200929688.NET Framework: 134. WPF - XBAP을 호스팅하고 있는 인터넷 익스플로러 인터페이스 구하기파일 다운로드1
717정성태5/11/200930100개발 환경 구성: 44. VHD 파일 크기 확장하는 방법 - 두 번째 이야기
714정성태5/7/200928611Windows: 45. Windows 7 RC와 함께 공개된 Windows Virtual PC 베타
713정성태4/30/200960416오류 유형: 79. DLL 'xxxxx.dll'을(를) 로드할 수 없습니다. [1]
712정성태4/28/200933025오류 유형: 78. Windows Vista/2008에서의 MSXML4.cab 파일 배포 문제
711정성태4/27/200932957개발 환경 구성: 43. Hyper-V VHD 파일 크기 확장하는 방법
710정성태4/26/200933660.NET Framework: 133. CallbackOnCollectedDelegate was detected [4]파일 다운로드1
709정성태4/24/200929526개발 환경 구성: 42. Windows Vista SP1에서 사용 가능한 Hyper-V 관리 도구
708정성태4/23/200934540.NET Framework: 132. ClickOnce 배포를 명령행 수작업 구성파일 다운로드1
707정성태4/22/200933806개발 환경 구성: 41. Hyper-V에 Linux 설치 - SUSE Linux Enterprise Server 11
706정성태4/21/200929606.NET Framework: 131. ClickOnce - 그룹화시켜 다운로드파일 다운로드1
705정성태4/20/200925192개발 환경 구성: 40. TFS2008 SP1의 DBTier에 SQL Server 2008 SP1 설치 [1]
704정성태4/19/200925193개발 환경 구성: 39. Together 2007 SP1 설치
702정성태4/18/200936872.NET Framework: 130. Infragistics - Tabbed MDI WPF 응용 프로그램파일 다운로드1
701정성태4/17/200931750Windows: 44. bootsect 오류 - Access is denied.
700정성태4/17/200934805.NET Framework: 129. Infragistics WPF 컨트롤 사용 [1]
699정성태4/16/200932512.NET Framework: 128. 이벤트 멤버의 명시적 구현파일 다운로드1
696정성태4/12/200932145오류 유형: 77. RDP 연결이 되지 않는 경우. [1]
693정성태4/9/200926631오류 유형: 76. "Client found response content type of '', but expected 'text/xml'. The request failed with an empty response.No Reports".
692정성태4/8/200939895.NET Framework: 127. ClickOnce로 ActiveX를 같이 배포하는 방법 [2]파일 다운로드1
... 166  167  168  169  170  171  172  173  174  [175]  176  177  178  179  180  ...