최상의 추측 : 디버그 빌드는 입출력 제한이 적용되고 릴리스 빌드는 프로세서 제한 (이 경우)입니다.
우리는 빌드 시스템에 대한 광범위한 벤치마킹을 수행했습니다. DEBUG
은 *.pdb
정보를 많이 작성하고, 더 많은 수의 *.obj
파일 (추가 디버깅 정보 용)을 작성합니다. 결과적으로 디스크 활동이 훨씬 늘어납니다. 이 등 대조적으로
의 RELEASE
는 훨씬 작은 *.obj
파일을 작성하고, 아무튼 구축, 더욱 당신이 당신의 소스 코드 (테이블, 문자, 문자열 리터럴)의 "리터럴"많은 경우 강조된다 "디버그"데이터베이스를 작성하는 것이 번거롭지 않습니다 (일반적인 스위치로 RELEASE
을 컴파일하면). 그러나 RELEASE
빌드의 링커는 최적화를 수행해야하며 다른 많은 작업은 단지 DEBUG
에서 수행되지 않으므로 프로세서에 바인딩됩니다. 이것은 가장 어려운 링커 스위치를 사용하여 "compile-to-maximize-speed/size"를 사용하면 RELEASE
에 대해 시간이 더 필요합니다.
(예, RELEASE
빌드는 실행 가능 디스크의 I/O 업데이트 주소를 사용해야하지만 실행 파일은 RELEASE
빌드에서 너무 작기 때문에 페이지를 많이 작성해야합니다. 이하, 그래서 RELEASE
빌드에서 I/O 페널티만큼 DEBUG
빌드로하지 않습니다.) 당신은 배 "RELEASE
이 DEBUG
보다 더 비싸다"을 관찰하고
. 많은 템플릿, 많은 기호 및 리터럴 등으로 I/O 바인딩 된 일부 프로젝트의 경우에 적합합니다. 드라이브가 가득 차 있는지, 느리게 움직이는 지, 불량 섹터가 있는지 확인하십시오. ? 그것들은 DEBUG
빌드를 위해 더 나 빠지게 (더 느리게) 만들 것입니다.
예, 다른 빌드는 "보다 3 배 더 비싸지 만 DEBUG
"과 같이 반대편이어야합니다. 이러한 빌드는 I/O 바인딩이 아닌 프로세서/링커 바인딩입니다.
[업데이트],이 질문은 "static-library, no-linking"입니다. I/O (많은 디스크 활동, 링크 없음)에 대한 시간 낭비와 프로세서 최적화 (최적화가 수행되지 않았기 때문에)가없는 최악의 시나리오입니다. 따라서 3 배가 "DEBUG
-is-slow-than-RELEASE
"이면이 프로젝트에서 얻을 수있는 것만 큼 나쁘지는 않을 것입니다. 연결 옵션을 추가하면 RELEASE
이 느려집니다.
프리 컴파일 된 헤더를 둘 다 사용하고 있습니까? –
빌드 옵션이란 무엇입니까? –
예 모두 PCH입니다./I/D PCH 이외의 빌드 옵션은/Od/Gm/EHsc/RTC1/MDd/W4/nologo/c/Wp64/ZI/TP/errorReport : prompt/wd4018/Zm200입니다. 그래, 우리가 거기에 "큰 선택적인 파일을 써야"했는지 궁금했다. 시간은 단지 라이브러리를 만들 뿐이므로 링크가 없습니다. – Philip