Frage

Soweit ich weiß, gibt es keine Möglichkeit, den C # -Compiler zu andeuten, eine bestimmte Funktion Inline und ich denke, es ist wie es ist von Entwurf.

Ich denke auch, dass die Programmierer nicht im Stich gelassen zu spezifizieren, was nicht Inline und was ist in der Regel eine gute Idee, wie es würde bedeuten, dass Sie denken, Sie sind schlauer als die JIT-Compiler (meine Beziehung zu denen, die tatsächlich), aber was ist, wenn ich, dass ein kritischer Teil des Codes angeben wollte extrem schnell sein muss, um jeden Preis, egal wie es auf dem Zielcomputer zu erreichen? Bis jetzt können Sie nicht so etwas tun und ich frage mich, wenn sowohl die Sprache C # und die JIT werden jemals diese Funktion unterstützen.

In meinem Fall weiß ich, was die Zielmaschine ist, und ich weiß, dass Funktion inlining die Leistung verbessern helfen. Das lässt mich denken, dass der einzige Weg, Funktion inlining zu erzwingen ist immer wissen, unter welchen Umständen die JIT es tun, aber ich glaube nicht, das ist eine gute Idee, entweder,

Jedes Licht auf dem Thema würde sehr geschätzt werden.

Danke.

War es hilfreich?

Lösung

Die Situation ein wenig mit dem Aufkommen von Net hat sich geändert 4.5.

Sie können nun eine Methode mit dem Attribut [MethodImplAttribute(MethodImplOptions.AggressiveInlining)] was es bewirkt, dass inlined durch den JIT werden, wenn überhaupt möglich.

Siehe Blog für weitere Details.

Andere Tipps

Kurze Antwort: Nein

Lange Antwort: http: //blogs.msdn. com / ericgu / Archiv / 2004/01/29 / 64644.aspx

Kriterien für inlining: http: //blogs.msdn .com / davidnotario / Archiv / 2004/11/01 / 250398.aspx und http://blogs.msdn.com/ericgu/archive/2004/01/29/64717.aspx

Beachten Sie, dass in den letzten beiden Links über Kriterien für inlining, die man über structs ist out-of-date nicht inlines ist; Aktuelle Informationen finden Sie unter: http://blogs.msdn.com/vancem/archive/2008/05/12/what-s-coming-in-net-runtime-performance-in -Ausführung-V3-5-sp1.aspx

I gebenchmarkt vor kurzem diese:

http://www.gfilter.net/junk/BubblesortBenchmark.jpg (je höher desto schlechter)

Wie Sie sehen können, die CLR und die JVM sind beide viel besser Methode Inlining, als Sie jemals sein wird.

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

Wenn Sie diesen seltenen Weg sind ausführen, brechen Sie Ihre C oder ASM aus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top