Domanda

Per quanto ne so non c'è modo di suggerire al compilatore c # di incorporare una particolare funzione e immagino che sia così in base alla progettazione.

Penso anche che non lasciare al programmatore di specificare cosa incorporare e cosa non sia generalmente una buona idea, poiché ciò implicherebbe che pensi di essere più intelligente del compilatore JIT (i miei rispetti a quelli che lo sono effettivamente), ma, se volessi specificare che una parte critica del codice deve essere estremamente veloce ad ogni costo, non importa come raggiungerla sulla macchina target? Al momento non puoi fare una cosa del genere e mi chiedo se sia il linguaggio c # che JIT supporteranno mai questa funzione.

Nel mio caso, so qual è la macchina target e so che la funzione di allineamento aiuterà a migliorare le prestazioni. Questo mi lascia pensare che l'unico modo per far rispettare le funzioni in linea sia conoscere in quali circostanze lo farà la SIC, ma non penso che sia una buona idea,

Qualsiasi luce sul soggetto sarebbe molto apprezzata.

Grazie.

È stato utile?

Soluzione

La situazione è leggermente cambiata con l'avvento di .Net 4.5.

Ora puoi decorare un metodo con l'attributo [MethodImplAttribute (MethodImplOptions.AggressiveInlining)] che, se possibile, lo farà rientrare nella JIT.

Vedi questo blog per maggiori dettagli.

Altri suggerimenti

Risposta breve: no

Risposta lunga: http: //blogs.msdn. com / ericgu / archive / 2004/01/29 / 64644.aspx

Criteri per l'integrazione: http: //blogs.msdn .com / davidnotario / archive / 2004/11/01 / 250398.aspx e http://blogs.msdn.com/ericgu/archive/2004/01/29/64717.aspx

Si noti che negli ultimi due collegamenti sui criteri per l'inline, quello relativo alle strutture che non sono in linea non è aggiornato; informazioni aggiornate sono disponibili all'indirizzo: http://blogs.msdn.com/vancem/archive/2008/05/12/what-s-coming-in-net-runtime-performance-in -version-v3-5-sp1.aspx

Di recente ho confrontato questo:

http://www.gfilter.net/junk/BubblesortBenchmark.jpg (Più alto è peggio)

Come puoi dire, CLR e JVM sono entrambi molto più bravi nel metodo di allineamento di quanto tu non sia mai stato.

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

Se stai eseguendo quel percorso raro, interrompi la tua C o ASM.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top