Pergunta

Tanto quanto eu sei que não há nenhuma maneira de sugerir que o compilador c # para inline uma função particular e eu acho que é como que por design.

Eu também acho que não deixar o programador para especificar o que inline eo que não é geralmente uma boa idéia, pois isso implicaria que você pensa que é mais esperto do que o compilador JIT (meus respeitos para aqueles que realmente são), mas, o que se eu quisesse especificar que uma parte crítica de código precisa ser extremamente rápido a qualquer custo, não importa como alcançá-lo na máquina de destino? Como de ainda você não pode fazer tal coisa e me pergunto se tanto a linguagem C # e o JIT nunca vai suportar esta funcionalidade.

No meu caso, eu sei o que a máquina de destino é, e eu sei que a função inlining vai ajudar a melhorar o desempenho. Isso deixa-me pensar que a única maneira de fazer cumprir a função inlining é conhecer em que circunstâncias o JIT irá fazê-lo, mas eu não acho que é uma boa idéia também,

Qualquer luz sobre o assunto seria muito apreciada.

Graças.

Foi útil?

Solução

A situação mudou um pouco com o advento do .Net 4.5.

Agora você pode decorar um método com o atributo [MethodImplAttribute(MethodImplOptions.AggressiveInlining)] que fará com que ele ser embutido pelo JIT, se possível.

Veja este blog para mais detalhes.

Outras dicas

Resposta curta: não

Long resposta: http: //blogs.msdn. com / ericgu / Arquivo / 2004/01/29 / 64644.aspx

Critérios para inlining: http: //blogs.msdn .com / davidnotario / Arquivo / 2004/11/01 / 250398.aspx e http://blogs.msdn.com/ericgu/archive/2004/01/29/64717.aspx

Note que nos dois últimos links sobre critérios para inlining, aquela sobre estruturas não ser inlines é out-of-date; informações atualizadas podem ser encontradas em: http://blogs.msdn.com/vancem/archive/2008/05/12/what-s-coming-in-net-runtime-performance-in -version-v3-5-sp1.aspx

Recentemente aferido o seguinte:

http://www.gfilter.net/junk/BubblesortBenchmark.jpg (Superior é pior)

Como você pode dizer, o CLR eo JVM são ambos muito melhor no método inlining do que você jamais será.

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

Se você está executando esse caminho raro, quebrar o seu C ou ASM.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top