예전에 지인에게 들은 이야기로 C++은 릴리즈 빌드냐 디버그 빌드냐에 따라 동작이나 성능이 꽤 차이나서 실 사용시에는 릴리즈로 빌드한 것을 사용하는데 C#은 성능적으로 큰 차이가 나지 않은데 사용 중에 문제가 발생했을 때 디버그로 빌드한 것이 정보가 많이 남아서 디버그로 빌드한 것을 사용한다고 들은 적이 있습니다.
아래 글은 이와 관련된 글을 번역한 것입니다(글이 2010년쯤 글이라서 지금과 다를 수 있습니다)
[번역] Performance differences between debug and release builds
닷넷으로 만드 프로그램을 실제 사용할 때 꼭 릴리즈로 빌드해서 사용하는지 아니면 제 지인처럼 만약을 위해 디버그로 빌드한 것을 사용하는지 궁금합니다.
지금 실무에서는 Framework 을 쓰고 있는데,
크게 무거운 작업을 하지는 않아서 그런가 큰 차이는 모르겠더라고요.
하지만 원칙(?) 을 지켜서 배포는 release빌드를 쓰고 있습니다.
그리고, #if DEBUG 전처리문 + config를 사용해 DB 접속 서버를 제어해서 쓰는경우도 있어서(테스트용, 실제 업무용)
어쩌다보니 자연스럽게 쓰게 되는 경우도 있었습니다 ^^
일반적인 SI 업무라면 모르겠지만, 제가 그동안 겪은 걸로 봐서는 디버그와 릴리스간에 성능 창이가 분명히 존재합니다.
닷넷의 경우, 디버그/릴리스가 2단계에 걸쳐서 영향을 미치는데요, 우선 IL 코드 생산이 달라지는 경우가 있습니다. 설령 IL 코드 생산이 같다고 해도 JIT 컴파일 시에 다시 한번 달라지는 경우가 있습니다. 그 2개를 종합해 보면 반복 구문의 경우 꽤나 성능 차이가 발생할 것입니다.
참고로, 디버깅을 위한 것이라면 dimohy님 의견처럼 pdb를 함께 배포하시는 것이 더 좋습니다. 물론 pdb가 있다고 해서 언제나 debug 빌드와 동일한 호출 스택을 얻는다거나… 하는 것은 아니지만 그래도 웬만한 수준에서는 차이 없을 정도의 정보는 제공합니다.
제시하신 문서의 상황은, 사실 제품을 만들어 배포한 후 현장에서 문제가 발생했을 때 해당 프로그램에 직접 attach 시켜 디버깅을 한다면 중요한 차이가 될 듯합니다. 제 경우에는, 그동안 현장에서 비주얼 스튜디오로 attach 시켜 디버깅할 수 있는 상황이 거의 없었기 때문에 문서에서의 차이가 중요하진 않았습니다.
현장의 문제는, 대부분 풀 메모리 덤프를 떠서 개발자 PC로 복사한 후 분석해야 했는데 그럴 때 debug/release로 인한 문제 분석 차이는 겪은 적이 없습니다.