타이밍이 코드는 실제로 가능하지 않습니다. 릴리스 버전의 코드를 실행하면 실제 타이밍 결과 만 얻을 수 있습니다. JIT 옵티 마이저에서도 작동합니다. 그리고 "pt"가 실제로 어디에서도 사용되지 않는다는 것을 알기에 충분히 영리합니다. 은 코드를 할당하는 모든 코드를 제거합니다 (). 당신은 똑같은 시간으로 끝날 것이고 여전히 아무것도 모릅니다.
강제로 JIT Optimizer가 실제로 지정 코드를 방출하게하려면 "pt"로 무언가를해야합니다. Like :
하지만 이제는 할당 효율에 대해 알아 내려고하지 않고 Console.WriteLine()이 소요되는 시간을 알 수 있습니다. 이 경우 가치가있는 것은 생성 된 기계 코드를 보는 것입니다. 여기 내 86 JIT 컴파일러가 사용 최적화 빌드 릴리스에서 발생하는 어떤 주석 버전입니다 :
00000008 xor eax,eax ; New Point
0000000a mov dword ptr [ebp-10h],eax ; pt.X = 0
0000000d mov dword ptr [ebp-0Ch],eax ; pt.Y = 0
[first fragment]
00000010 mov esi,1 ; i = 1
pt = New Point(i, i)
00000015 mov dword ptr [ebp-10h],esi ; pt.X = i
00000018 mov dword ptr [ebp-0Ch],esi ; pt.Y = i
[elided]
00000036 add esi,1 ; i = i + 1
00000039 jo 0000007D ; overflow check
0000003b cmp esi,3E8h ; i <= 1000?
00000041 jle 00000015 ; Yes: loop
[2nd fragment]
00000043 mov esi,1 ; i = 1
pt.X = i
00000048 mov dword ptr [ebp-10h],esi ; pt.X = i
pt.Y = i
0000004b mov dword ptr [ebp-0Ch],esi ; pt.Y = i
[elided]
00000069 add esi,1 ; i = i + 1
0000006c jo 0000007D ; overflow check
0000006e cmp esi,3E8h ; i <= 1000?
00000074 jle 00000048 : Yes: loop
에서 [생략] 섹션은 Console.WriteLine() 호출입니다. 기계 코드 지침을 자세히 살펴보십시오.
정확한 코드는입니다.
JIT 컴파일러는 멋진 방식입니다. 동일한 작업을 수행하도록 요청하면 동일한 코드가 생성됩니다. 일반적인 조언은 효율성 대신 명확성을위한 코드 작성입니다. 그러한 진술은 종종 검증되지는 않지만 종종 정확합니다.
감사합니다. 나는 이와 같은 대답을 얻기를 희망했다. 나는 명확성을 위해 코드를 작성하는 것을 좋아하지만 오래된 "이 최적의 것"은 계속 내 머리 속에 터져 나옵니다. –