일부 이전 개발자는 디버그 모드로 작성된 일부 어셈블리를 프로덕션에 넣었습니다. 릴리즈 모드에서 다시 컴파일하고 재배포 할 가치가 있습니까? 1-2 %의 성능 향상이 있다면, 나는 그저 거기에 두는 편이 좋을 것입니다. 반면에 10-20 %의 증가는 내 마음을 바꿀 수도 있습니다.디버그 모드와 릴리스 모드로 빌드 된 .NET 어셈블리 간의 성능 차이가 있습니까?
답변
우리는 프로덕션에서 중요한 성능 문제가 있었기 때문에 1 년 전과 같은 질문이있었습니다. MS Premier 지원에서 나에게 설명했듯이 디버그 빌드 버전에는 응용 프로그램의 기능에 따라 메모리 소비가 약 1 - 10 % 증가 할 수있는 디버깅을위한 후크가 포함됩니다.
문제가 없다면 혼자있게하고 메모리 소비에 문제가 있다면 다시 컴파일하고 배포하십시오.
제 경험상 30-40 %의 차이를 보았습니다. 이것은 DotNetZip으로, 암호화, 압축 및 파일 I/O를 수행하는 라이브러리입니다. 85 % 이상의 시간이 암호화 및 압축에 사용되어 바이트 만 이동했습니다.
디버그 심볼을로드해야하므로 더 많은 메모리를 소비하기 때문에 프로덕션에서 디버그 빌드를 사용하는 것에 대한 또 다른 인수가 있습니다.
일반적으로 릴리스 버전은 /optimize
컴파일러 옵션을 사용하여 최적화되어 컴파일되므로 이점이 있습니다. 그러나 차이점이 얼마나 큰지는 특정 어셈블리에 따라 달라집니다. 프로파일 링해야합니다.
코드의 복잡성에 따라 성능 차이가 기하 급수적으로 증가한다는 것을 알게되었습니다. 간단한 응용 프로그램은 5 %의 차이 만 보일 수 있지만 복잡한 응용 프로그램 특히 50 %의 성능 저하를 보았습니다. 배열이나 맵과 같은 더 큰 데이터 구조가 필요합니다.
설정 방법에 따라 디버그 코드가 약간 다를 수도 있습니다. 예를 들어 어서션을 살펴보십시오.
#if DEBUG
...
#endif
또한의 Debug.WriteLine, Debug.Assert, 그리고 열고 System.Diagnostics 네임 스페이스에 다른 물건을 제거 할 수 있습니다 :
그것은 그 릴리스 코드를 주목할 필요가있다 또한 같은 몇 가지 전처리 물건을 제거 테스트에 유용하지만 릴리스 빌드를 위해 잘 설계된 코드에는 무의미합니다.
디버그 및 릴리스 빌드에 대해 생성 된 IL 코드를 보면 일반적으로 차이가 매우 작습니다. 대부분의 차이점은 Edit and Continue와 소스 라인 디버깅을 지원하기 위해 핵심 소스 지점에서 추가 nop 명령에 있습니다. 그러나 .NET 런타임이 실제로 MSIL을 JIT하면 런타임 어셈블리가 거의 동일합니다. 가장 큰 차이점은 디버거가 연결될 때입니다. 그러면 JIT가 실제 실행 코드를 최적화하지 못하게됩니다.
릴리스 버전은 많은 코드가 포함되어 있지 않기 때문에 훨씬 더 작습니다. #if DEBUG 문으로 둘러싸인 코드 패치는 물론 릴리스 모드의 메서드 호출을 생략하도록 컴파일러에 지시하는 조건부 특성 (Debug.WriteLine과 유사 함)이있을 수 있습니다.
Debug.WriteLine 및 Trace.WriteLine 메서드는 프로덕션 코드에 남아있을 때 디버거가 연결되지 않은 경우에도 중요한 성능 관련 내용을 포함하고 있습니다.
- 1. 릴리스/디버그 빌드 간의 거대한 프레임 속도 차이
- 2. 프로필 디버그 또는 릴리스 빌드?
- 3. 왜 두 쿼리 간의 성능 차이가 있습니까?
- 4. iframe 숨기기 방법 간의 성능 차이가 있습니까?
- 5. Debug와 Release간에 (성능) 차이가 있습니까?
- 6. Visual Studio : 디버그 모드와 릴리스 모드를 전환하는 키보드 단축키
- 7. 빌드 간의 성능 문제
- 8. 디버그와 릴리스 빌드 간의 NSStoreType 변경 관리
- 9. 디버그 빌드가있는 라이브러리 관리/사용 대 릴리스 빌드
- 10. WIN32 메모리 문제 (디버그/릴리스 간의 차이점)
- 11. Android NDK에서 디버그 빌드와 릴리스 빌드
- 12. DLL에 무엇이 들어 있습니까? 디버그 DLL과 릴리스 DLL의 차이점은 무엇입니까?
- 13. Javac 디버깅간에 성능 차이가 있습니까?
- 14. CruiseControl.NET : 디버그 및 릴리스 구성으로 프로젝트 빌드
- 15. Android : 디버그 대 릴리스 (SDK) 성능
- 16. 디버그 모드가 작동합니다. 릴리스 모드로 인해 ERROR가 많이 생성됩니다!
- 17. 디버그 빌드 앱 찾아보기 CRT 어셈블리 해제
- 18. 디버깅과 릴리스 빌드 간의 차이를 확인하는 변수 또는 속성을 수정하십시오.
- 19. cmake에서 빌드 모드 (디버그 또는 릴리스)를 제어하는 방법은 무엇입니까?
- 20. 디버그/릴리스 모드의 부동 소수점/이중 정밀도
- 21. 테스트 디버그 앱과 릴리스 된 디버그 앱이 나란히 있습니다
- 22. 빌드 서버에서 단위 테스트 : 릴리스 또는 디버그 코드?
- 23. 릴리스 빌드 시간이 오래 걸립니다 VS2008
- 24. 릴리스 빌드 확인
- 25. 디버깅 할 때 XCode 디버그 대 릴리스 빌드
- 26. 디버그 또는 릴리스 모드로 빌드 할 솔루션의 모든 프로젝트를 빌드하도록 TFS 2010 빌드를 강제 적용하려면 어떻게해야합니까?
- 27. 왜이 성능 차이가 있습니까? (예외 잡기)
- 28. Datawarehouse의 성능 차이가 비정규 화 된 시간
- 29. NANT aspnet_compiler.exe는 릴리스 빌드
- 30. .NET 응용 프로그램이 디버그 또는 릴리스 모드로 컴파일되었는지 확인하는 방법은 무엇입니까?