문제

내가 아는 한, C# 컴파일러를 힌트 특정 함수를 인화 할 수있는 방법은 없으며 디자인에 의한 것 같아요.

또한 프로그래머가 당신이 JIT 컴파일러보다 똑똑하다고 생각한다는 것을 암시하기 때문에 프로그래머가 인라인해야 할 사항과 일반적으로 좋은 아이디어가 아닌 것을 지정하지 못하게한다고 생각합니다. 대상 기계에서 달성하는 방법에 관계없이 코드의 임계 부분이 어떤 비용 으로든 매우 빠르도록 지정하려면? 아직 당신은 그런 일을 할 수 없으며 C# 언어와 JIT 가이 기능을 지원할 것인지 궁금합니다.

제 경우에는 대상 기계가 무엇인지 알고 있으며, 기능이 인한 기능이 성능을 향상시키는 데 도움이된다는 것을 알고 있습니다. 이것은 기능을 시행하는 유일한 방법은 JIT가 어떤 상황에서 어떤 상황에서 그것을 할 것인지 알게되는 것입니다. 그러나 나는 그것이 좋은 생각이라고 생각하지 않습니다.

주제에 대한 빛은 대단히 감사 할 것입니다.

감사.

도움이 되었습니까?

해결책

.NET 4.5의 출현으로 상황이 조금 바뀌 었습니다.

이제 속성으로 메소드를 장식 할 수 있습니다 [MethodImplAttribute(MethodImplOptions.AggressiveInlining)] 가능하다면 JIT에 의해 인쇄 될 것입니다.

보다 이 블로그 자세한 사항은.

다른 팁

짧은 대답 : 아니요

긴 답변 : http://blogs.msdn.com/ericgu/archive/2004/01/29/64644.aspx

인라인 기준 : http://blogs.msdn.com/davidnotario/archive/2004/11/01/250398.aspx 그리고 http://blogs.msdn.com/ericgu/archive/2004/01/29/64717.aspx

인라인의 기준에 대한 마지막 두 링크에서 구조가 인라인이 아닌 것에 대한 링크는 오래된 것입니다. 업데이트 된 정보는 다음에서 찾을 수 있습니다. http://blogs.msdn.com/vancem/archive/2008/05/12/what-coming-in-net-runtime-performance-in-version-v3-5p1.aspx

나는 최근에 이것을 벤치마킹했다 :

http://www.gfilter.net/junk/bubblesortbenchmark.jpg (더 높음이 더 나쁘다)

당신이 알 수 있듯이 CLR과 JVM은 당신이 그 어느 때보 다 방법보다 훨씬 나은 방법입니다.

if(performance < ACCEPTABLE){
   if(profiler.showsAffectOfMethodCallOverhead() && seriouslyWeDoubleChecked()){
      if(runtimeContext.isReallyStableAndNotProneToChange() && weNeedToGetThisThingBatOutOfHellFast()){
          return thisIsOneOfTheFewTimesWhenANativeExternalFunctionMayBeWorthIt();
      }
   }
 }
 return dontWorryAboutIt();

그 희귀 한 경로를 실행하는 경우 C 또는 ASM을 분해하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top