닷넷으로 만든 프로그램의 릴리즈, 디버그 빌드 중 어느 것을 실제 사용하시나요?

예전에 지인에게 들은 이야기로 C++은 릴리즈 빌드냐 디버그 빌드냐에 따라 동작이나 성능이 꽤 차이나서 실 사용시에는 릴리즈로 빌드한 것을 사용하는데 C#은 성능적으로 큰 차이가 나지 않은데 사용 중에 문제가 발생했을 때 디버그로 빌드한 것이 정보가 많이 남아서 디버그로 빌드한 것을 사용한다고 들은 적이 있습니다.

아래 글은 이와 관련된 글을 번역한 것입니다(글이 2010년쯤 글이라서 지금과 다를 수 있습니다)
[번역] Performance differences between debug and release builds

닷넷으로 만드 프로그램을 실제 사용할 때 꼭 릴리즈로 빌드해서 사용하는지 아니면 제 지인처럼 만약을 위해 디버그로 빌드한 것을 사용하는지 궁금합니다.

6개의 좋아요

아마 업체에서는 컴파일되어 나온 결과물에 난독화하는 과정을 추가하기 때문에 문서에서 언급하신 것들이 대부분 다 소용없지 않을까… 조심스레 추측해봅니다.

4개의 좋아요

저도 과거에 관련된 경험을 했는데요, Debug나 Release나 성능 차이가 거의 없었습니다. (.NET Framework 기억이라… 최근에는 잘 모르겠으나 퍼포먼스 관련 문서를 통해서는 .NET은 차이가 이제 많이 나는 것 같습니다.)

그리고, pdb파일을 생성했다면 Release라 하더라도 예외 발생 시 예외가 발생한 소스코드의 정보를 얻을 수 있어서 Release로 배포해도 괜찮습니다.

3개의 좋아요

지금 실무에서는 Framework 을 쓰고 있는데,
크게 무거운 작업을 하지는 않아서 그런가 큰 차이는 모르겠더라고요.
하지만 원칙(?) 을 지켜서 배포는 release빌드를 쓰고 있습니다.
그리고, #if DEBUG 전처리문 + config를 사용해 DB 접속 서버를 제어해서 쓰는경우도 있어서(테스트용, 실제 업무용)
어쩌다보니 자연스럽게 쓰게 되는 경우도 있었습니다 ^^

2개의 좋아요

일반적인 SI 업무라면 모르겠지만, 제가 그동안 겪은 걸로 봐서는 디버그와 릴리스간에 성능 창이가 분명히 존재합니다.

닷넷의 경우, 디버그/릴리스가 2단계에 걸쳐서 영향을 미치는데요, 우선 IL 코드 생산이 달라지는 경우가 있습니다. 설령 IL 코드 생산이 같다고 해도 JIT 컴파일 시에 다시 한번 달라지는 경우가 있습니다. 그 2개를 종합해 보면 반복 구문의 경우 꽤나 성능 차이가 발생할 것입니다.

참고로, 디버깅을 위한 것이라면 dimohy님 의견처럼 pdb를 함께 배포하시는 것이 더 좋습니다. 물론 pdb가 있다고 해서 언제나 debug 빌드와 동일한 호출 스택을 얻는다거나… 하는 것은 아니지만 그래도 웬만한 수준에서는 차이 없을 정도의 정보는 제공합니다.


제시하신 문서의 상황은, 사실 제품을 만들어 배포한 후 현장에서 문제가 발생했을 때 해당 프로그램에 직접 attach 시켜 디버깅을 한다면 중요한 차이가 될 듯합니다. 제 경우에는, 그동안 현장에서 비주얼 스튜디오로 attach 시켜 디버깅할 수 있는 상황이 거의 없었기 때문에 문서에서의 차이가 중요하진 않았습니다.

현장의 문제는, 대부분 풀 메모리 덤프를 떠서 개발자 PC로 복사한 후 분석해야 했는데 그럴 때 debug/release로 인한 문제 분석 차이는 겪은 적이 없습니다.

6개의 좋아요