26

C# 릴리스 코드의 대부분은 '코드 최적화'옵션을 해제하여 만들어졌습니다. 릴리스 모드로 작성된 코드를보다 쉽게 ​​디버깅 할 수 있도록하는 것입니다.Visual Studio 빌드에서 '코드 최적화'옵션의 이점

우리가 백엔드 웹 서비스에 연결하는 상당히 간단한 데스크탑 소프트웨어 (즉, 특히 프로세서 집약적 인 응용 프로그램이 아닌)를 작성했다면 어떤 종류의 성능에 영향이있을 것으로 예상됩니까?

그리고 영향을받는 특정 플랫폼이 있습니까? 예 : 멀티 프로세서/64 비트.

+0

나는이 사기 야 실행을 보았다 C/C++ 문화가 아직 남아있는 구식 상점에서는 최신 기술로 전환하려고 시도하는 동안 (주장) _lot_에 들어가야합니다. –

+0

@ 그렉 D - 재미있는 점은, C++ 문화가 최적화를 선호한다고 생각했을 것입니다. –

+1

@gt : 최적화 및 "빠른 코드"를 선호하기 위해 자주 사용하는 C++ 문화권이 있지만 대부분의 이러한 주장은 미신과 새롭거나 다른 것에 대한 비합리적 인 두려움에 근거합니다. 나는 언급하고있는 문화가 역기능이라는 것을 부정하지 않지만,이 특정 상점 밖에서도 널리 퍼져 있다고 생각한다.반대로 모든 증거에도 불구하고 그 C++ 코드가 합리적으로 작성된 C# 코드와 비교하여 우수한 성능 특성을 가지고 있다고 주장하는 사람들의 수가 예를 들어 놀랍습니다. 나는 "내 자신의 기억을 너무 잘 관리하겠다"는 말을 너무 자주 들었다. –

답변

13

자세한 내용은 http://blogs.msdn.com/jaybaz_ms/archive/2004/06/28/168314.aspx에서 확인할 수 있습니다. 간단히

... 관리 코드에서

, 런타임에서 지터는 거의 모든 최적화를 수행합니다. 생성 된 IL의이 플래그와의 차이는 매우 작습니다.

+5

나는 그 인용문이 왜 중요한지 잘 모르겠습니다. 생성 된 일리노이가 아니더라도 JITter의 최적화는 플래그의 영향을 받기 때문에 플래그가 성능에 영향을 미칩니다. 원래의 질문은 그 차이의 크기에 관한 것이 었습니다. – phoog

2

컴파일러에서 수행 한 최적화 작업은 매우 낮으므로 사용자의 경험에 영향을 미치지 않습니다.

응용 프로그램에서 최적화를 정량화하려면 최적화되지 않은 최적의 빌드를 프로파일 링하고 결과를 비교하십시오.

+0

디버거가 줄을 건너 뛰는 것을 보았습니다. 그건 VS 2013과 15에서 그런데! 때로는 디버깅 목적으로 로컬에서 토글 해제하기도합니다. – arviman

6

사실, 때로는 상당한 차이가 있습니다.

  • 불필요한 지역 변수 (각 통화에 대한 즉, 더 큰 스택 프레임)
  • 너무 일반적인 조건 지침, JIT 변환합니다 (이 JIT가 완전히 처리하지 않는 무언가로) 정말 성능에 영향을 미칠 수있는 것 그 (것)들을 확실히 똑 바른 방법으로. 당신은 수치 일을하는 경우

    그래서, -

  • 불필요한 분기 (결국, 모든 스마트 최적화를 할 너무 많은 시간이없는 또한 JIT에 의해 잘 제공되지 않음) - 최적화를 켭니다 . 그렇지 않으면 아무런 차이가 보이지 않습니다.

26

"성능 저하"질문에 답변 할 수있는 유일한 사람은 귀하입니다. 두 가지 방법으로 시도해보고 성능을 측정하고 어떤 일이 발생하는지 확인하십시오. 명중은 거대 할 수 있거나 존재하지 않을 수 있었다; 이 책을 읽은 사람은 누구도 "엄청난"것이 1 마이크로 초 또는 20 분을 의미하는지 알지 못합니다. 오히려 지터보다 - - 당신이 C# 컴파일러에 의해 수행되는 것을 최적화에 관심이 있다면

최적화 스위치가 켜져있을 때, 볼은 :

http://blogs.msdn.com/ericlippert/archive/2009/06/11/what-does-the-optimize-switch-do.aspx

관련 문제