확실한 예 또는 아니오를 기대하지 않습니다. 당신이 가진 지식은 내가 대답으로 생각할 것입니다.최적화가 활성화되면 JIT는 항상이 방법을 인라인합니까?
private String CalculateCharge(Nullable<Decimal> bill, Nullable<Decimal> rate)
{
return ((bill ?? 0.0m) * (rate ?? 0.0m)).ToString("C");
}
확실한 예 또는 아니오를 기대하지 않습니다. 당신이 가진 지식은 내가 대답으로 생각할 것입니다.최적화가 활성화되면 JIT는 항상이 방법을 인라인합니까?
private String CalculateCharge(Nullable<Decimal> bill, Nullable<Decimal> rate)
{
return ((bill ?? 0.0m) * (rate ?? 0.0m)).ToString("C");
}
인라인은 C# 컴파일러가 아니라 JIT의 구현 세부 사항입니다. Eric Gunnerson's blog에서 :
JIT를이 에 휴리스틱의 수는 방법은 안감에- 수 있는지 여부를 결정합니다. 인라인되지 IL 초과의 32 바이트가
- 방법 : 다음 그 (이 남김이 아니라고 참고)의 더 중요한 목록이다.
- 가상 함수는 인라인되지 않습니다.
- 복잡한 흐름 제어가있는 메소드는 줄이 정렬되지 않습니다. 복잡한 흐름 제어는 if/then/else와는 다른 흐름 제어입니다. ; 이 경우 스위치 또는 동안.
- 예외 처리 블록을 포함하는 메서드는 인라인이 아니지만 예외를 throw하는 메서드는 여전히 인라인의 후보가됩니다.
- 메서드의 형식 인수가 구조체 인 경우 메서드는 인라인되지 않습니다. 당신의 방법은 그래서는 추론과 일치 할 수 있습니다 매우 복잡한 매우 짧고 아니지만
는 Nullable<T>
는 struct
그래서 난 당신의 방법은 인라인되지 않은 추측 것입니다.
이 방법을 인라인하면 성능이 향상되므로 JIT는이 방법을 인라인합니다. 그렇지 않으면 그렇지 않습니다. 그들은 JIT의 향후 버전에서 변경 될 수 있으므로
가내가 주의 깊게 추론 코딩 명시 적으로 고려할 것입니다 :하지만이 정말 당신이 코드를해야 JIT 아무것도의 구현 세부입니다. 인라인 될 것이라고 보장하려는 메서드의 정확성을 손상시키지 마십시오.
편집 :은 분명히 인라인되지 않는 구조체에 대한 비트가 오래된이다; 업데이트 된 정보는 Vance Morrison's blog에서 찾을 수 있습니다.
struct 옵션은 .NET 3.5sp1에서 더 이상 true가 아닙니다. 구조체 매개 변수는 이제 인라인 될 수 있습니다. –
@ 리피드 코세이지 : 정보 주셔서 감사합니다. 입증 된 포인트 :) – dtb
이것에 "예"라고하기는 어렵지만 사적인 것이므로 그렇게 생각합니다. –
C# 컴파일러는 * anything *을 인라인하지 않습니다. 최적화 목록을 보려면 jit 컴파일러가 아닌 C# 컴파일러가 수행합니다. 주제에 관한 필자의 기사를 참조하십시오. http://blogs.msdn.com/ericlippert/archive/2009/06/11/what-does-the-optimize-switch-do.aspx –
감사합니다. Eric, 할 일이 많습니다. – ChaosPandion