VS 2008을 사용하여 코드를 컴파일하고 디버깅하고 있습니다. 내 응용 프로그램에서 프론트 엔드는 C#이고 백엔드는 C++입니다. interop을 통해 C++ 코드에 액세스합니다.디버거를 연결하면 .Net 코드에서 C++ DLL을 호출하는 것이 느려집니다.
내가 알아 차린 사실 중 하나는 F5 키를 눌러 네이티브 코드의 디버그 버전에 연결하면 네이티브 코드를 실행하는 데 20 초 이상 걸리는 것입니다. 네이티브 코드의 릴리스 버전에 링크하면 실행하는 데 필요한 시간이 7-8 초로 단축됩니다.
VS 2008 디버거가 연결되어 있지 않은데 (예 : IDE 외부에서 exe를 클릭 한 경우) C++ 코드의 릴리스 버전에 연결하면 실행하는 데 1 초 밖에 걸리지 않습니다. C++ 코드.
모든 테스트에서 C++ 코드에 대한 입력은 항상 항상 동일하다는 점에 유의하십시오.
확실히, 디버거 및 디버그 빌드의 첨부와 관련된 일부 오버 헤드가 있습니다. 하지만 성능의 차이가 너무 큽니다. 제가 놓친 것이 있을까요 아니면 조정할 수 있습니까?
나는 이것이 매우 수수께끼 인 것을 알았다. 내 경험에 비추어 볼 때 C#은 디버거로 실행 중인지 또는 디버그 모드로 실행 중인지에 관계없이 많은 오버 헤드를 발생시키지 않습니다.
왜 이런 일이 일어 나는지 모르지만 나는 여러 번 보았고 그 주위에 어떤 방법도 찾지 못했습니다. 나는 unmarshed 코드와 marshed 코드 사이의 jit 디버거가 잘 조정되지 않았다고 가정합니다. – madmik3