Quando um método é elegível para ser incorporado pelo CLR?

Eu observei muitos códigos "introspectivos na pilha" nos aplicativos, que geralmente dependem implicitamente dos métodos que os contêmnão sendo inline por sua correção. Esses métodos geralmente envolvem chamadas para:

MethodBase.GetCurrentMethodAssembly.GetCallingAssemblyAssembly.GetExecutingAssembly

Agora, acho as informações em torno desses métodos muito confusas. Ouvi dizer que o tempo de execução não incorporará um método que chama GetCurrentMethod, mas não consigo encontrar nenhuma documentação para esse efeito. Já vi postagens no StackOverflow em várias ocasiões, comoeste, indicando que o CLR não alinha chamadas de assemblagem cruzada, mas oGetCallingAssembly documentação indica fortemente o contrário.

Há também o muito difamado[MethodImpl(MethodImplOptions.NoInlining)], mas não tenho certeza se o CLR considera que isso é uma "solicitação" ou um "comando".

Observe que estou perguntando sobre inliningelegibilidade do ponto de vista do contrato,não sobre quando as implementações atuais do JITter recusam considerar métodos devido a dificuldades de implementação ou sobre quando o JITter finalmente terminaescolhendo alinhar um método elegível após avaliar as compensações. eu liesta eesta, mas eles parecem mais focados nos dois últimos pontos (há menções passadas a MethodImpOptions.NoInlining e "instruções exóticas de IL", mas elas parecem ser apresentadas como heurísticas e não comoobrigações)

Quando é o CLRpermitido inline?

questionAnswers(4)

yourAnswerToTheQuestion