2011-03-24 2 views
0

Visual Studio 2010과 함께 64 비트 Windows 7에서 32 비트 GLUT를 사용하고 있습니다.이 프로젝트에는 C++ 구현 및 헤더 파일 만 포함되어 있습니다. Win32 특정 코드가 없습니다._mainCRTStartup이 디버깅을 사용할 때 속도가 느린 이유는 무엇입니까?

많은 픽셀 그리기 작업을 수행합니다. 릴리스 구성에서는 즉시 발생하지만 디버그 구성으로는 매우 느립니다 (적어도 5 초 이상 걸립니다). 나는 내가 더 많이 그렸을 때 그것이 더 느려졌다는 것을 알아 차렸다. 그래서 나는 그것을 생각했다.

Visual C++ 프로파일 러는 _mainCRTStartup에 소비 된 시간의 100 % (나는 반올림 한 것 같습니다)라고 말합니다. 이 C 런타임을 이해하지만 디버그 구성에서 너무 느리게 실행되는 원인은 무엇입니까? 동일한 C 코드는 디버그 및 릴리스 구성 모두에서 똑같이 즉각적입니다. _mainCRTStartup이 훨씬 오래 걸리는 C++의 특별한 기능이 있습니까?

편집 : 분명히 내가 간과 한 것은 _mainCRTStartup 프레임 아래에 Unknown frame(s)에 대한 참조입니다. 나는 이것이 main()이고 그 자식 함수라고 가정합니다. 디버그 나 릴리스에서 내가 작성한 함수를 실제로 프로파일 링 할 수는 없습니다. 이 후 어디로 가야합니까?

+4

'_mainCRTStartup'는'main'을 호출합니다 - 처음부터 끝까지 100 %가 분명히 전체 실행 시간입니다 .-) – Cameron

+0

흥미 롭습니다. 그 맛있는 음식에 감사드립니다. 말이된다. 하지만 5 초 지연이 발생하기 전에 설명하지 않습니다. :( – johansson

+1

디버깅의 성능에 대해 신경 쓸 필요가 없지만 시간이 걸리는 것을 알아 내고 싶다면 덜 거칠 필요가 있습니다. 시간의 100 %는 시작 코드 (' – GManNickG

답변

0

_mainCRTStartup의 "exclusive % samples"은 무엇입니까? 포함 된 샘플은이 루틴에 쓸모가 없습니다.

1

디버거에서 사용하는 DLL의 .pdb 파일을 찾는 데 문제가있을 수 있습니다. 먼저 할 일은 심볼 서버 설정을 확인하는 것입니다. 도구 + 옵션, 디버깅, 기호. 심볼 파일 위치를 선택 해제하고 다시 시도하십시오.

+0

아무 것도 확인되지 않은 것 같습니다 – johansson

+0

main() 메서드에 중단 점 설정 F5? –

+0

키를 누른 후 얼마나 오래 걸릴까요? 매우 순식간입니다. 방금 밀리 초 비교를했습니다. 문제는 그리기 기능에있는 것 같습니다. 릴리스 구성에서는 디버그 구성에서 93 밀리 초가 걸리며 3884 밀리 초가 걸립니다. Visual C++은 여전히 ​​_mainCR TStartup'. 93ms가 꽤 좋은 성능이지만, 가장 비싼 전화와 모든 것이 무엇인지 알고 싶습니다. 감사! – johansson

0

_mainCRTStartupmain을 호출하는 기본 기능입니다. 예, 모든 프로그램에 대해 시간의 100 %는 다른 모든 기능을 호출하기 때문에 해당 기능 내부에서 보냅니다.

디버그 모드를 프로파일 링하고 있습니까? 왜?

+0

시작이 릴리스 실행과 비교하여 매우 느리기 때문에. 또한 디버그 및 릴리스에서 C에 해당하는 것보다 느립니다. 나는 _mainCRTStartup이 C 코드에 대해서도 호출된다고 가정하고 있습니다. 그렇다면 왜 C가 C++보다 디버그 모드에서 훨씬 빠릅니까? 또한 질문에서 언급 했어야합니다.하지만 _mainCRTStartup에는 알 수없는 프레임이 있습니다. 프레임이 내 main() 함수이고 결국 호출되는 함수라고 가정합니다. 그러나 그들은 프로파일 러에 나타나지 않습니다. 나는 그 질문을 편집 할 것이다. 편집 : Grr, 나는 + 입력을 이동하는 것을 잊었다. – johansson

관련 문제