2008-09-19 2 views

답변

19

어셈블리를 컴파일 할 때 설정됩니다.

  • IL 최적화
  • JIT 네이티브 코드 품질 : 최적화의 두 가지 유형이 있습니다.

기본 설정이 최적화되지 않은 IL을 의미한다이

/optimize- /debug- 

이며, 네이티브 코드를 최적화.

/optimize /debug(+/full/pdbonly) 

이것은 최적화되지 않은 IL 및 최적화되지 않은 기본 코드 (최상의 디버그 설정)를 의미합니다.

/optimize+ /debug(-/+/full/pdbonly) 

이 IL 최적화 된 네이티브 코드를 최적화 된 생산하고 마지막으로

는 가장 빠른 성능을 얻을 수 있습니다.

최적화되지 않은 IL을 생성 할 때 컴파일러는 코드 전체에 NOP 명령을 삽입합니다. for, while, else, try, catch 등의 제어 흐름 명령에 중단 점을 설정하면 코드를 디버그하기가 쉽습니다.

CLR은 코드를 최적화하는 데 매우 효과적입니다. 메소드가 JIT 된 후에는 호출 또는 callvirt 명령어의 포인터가 원시 코드로 직접 지정됩니다.

또한 CLR은 코드를 JIT 할 때 사용할 수있는 아키텍처 트릭을 이용합니다. 이것은 Jgen을 통해 실행 된 어셈블리가 Ngen을 사용하여 사전 컴파일 된 어셈블리보다 빠르게 실행된다는 것을 의미합니다. NGEN은 모든 플랫폼에서 컴파일되고 어떤 트릭도 활용하지 않기 때문에 시작 시간이 다소 느리지 만 그래도 Ngen을 사용합니다.

+3

+1 니스. IDE에서 정확히 어디에서이 값을 설정합니까? – Trap

+1

VS2010 (및 이전 버전 IIRC)에서는 릴리즈 구성에서 기본적으로 켜져있는 "코드 최적화"프로젝트 설정을 활성화합니다. (이것은/optimize +와 동등한'/ optimize'와 동일합니다.) 최적화 도구는 [아주 멀리 떨어져 있습니다.] (http://stackoverflow.com/questions/10369421/why-does-adding-local) -variables-make-net-code-slower). –

+1

기계 별 트릭 AFAIK는 없습니다. 나는 .NET 팀이 여러 버전의 JIT Optimizer (매우 복잡한 짐승)를 유지하는 것이 잠재적 인 이익에 비해 너무 비싸다고 느꼈다고 들었습니다. –

관련 문제