Pergunta
O que é inlining?
O que é utilizado?
Can-lhe algo em linha em C #?
Solução
O que é
Nos termos de C e C ++ você usa a palavra-chave inline para dizer ao compilador para chamar uma rotina sem a sobrecarga de empurrar parâmetros para a pilha. A função em vez tem código de máquina-lo de inserido na função de onde foi chamado. Isso pode criar um aumento significativo no desempenho em determinados cenários.
Perigos
Os benefícios de velocidade na utilização de "inline" diminuir significativamente à medida que o tamanho dos função inline aumenta. O uso excessivo pode realmente causar um programa para executar mais lento. Inlining uma pequena função de assessor normalmente irá diminuir o tamanho do código enquanto inlining uma grande função pode aumentar drasticamente o tamanho do código.
Inlining em C #
Em C # inlining acontece no nível JIT em que o compilador JIT toma a decisão. Não há atualmente nenhum mecanismo em C # que você pode explicitamente fazer isso. Se você deseja saber o que o compilador JIT está fazendo, então você pode ligar no: System.Reflection.MethodBase.GetCurrentMethod().Name
em tempo de execução. Se o método for inline ele irá retornar o nome do autor da chamada em seu lugar.
Em C # você não pode forçar um método para em linha, mas você pode forçar um método não. Se você realmente precisa de acesso a uma pilha de chamadas específico e você precisa remover inlining você pode usar: MethodImplAttribute
com MethodImplOptions.NoInlining
. Além disso, se um método é declarado como virtual em seguida, ele também não será inlined pelo JIT. A razão por trás disso é que o objectivo final da chamada é desconhecida.
Outras dicas
Para a definição e discussão de inlining, ver esta questão .
Em C # você não precisa para instruir o compilador ou tempo de execução para em linha porque o tempo de execução irá fazê-lo automaticamente.
P.S. Esta resposta também é correto para Java.
Inlining é quando em vez de chamar uma função particular, o conteúdo da função são feitas diretamente no site da chamada. A principal razão para isso é que ele remove a sobrecarga de chamar uma função executando o conteúdo de função no callsite.
É usado como uma técnica de otimização. No caso de C #, ele realmente depende do motor CLR JIT para fazer o trabalho. Em tempo de execução, quando compilar um método, o motor JIT irá utilizar uma heurística para determinar se uma função inline é apropriado e será uma otimização effictive. Se assim for, é realizado um inline.
Vance tem um ótimo artigo sobre o que o JIT considera quando inlining: http://blogs.msdn.com/vancem/archive/2008/08/19/to-inline-or-not-to- inline-que-é-o-question.aspx
Não há nenhuma maneira de forçar um inline em C #. A linguagem não suporta esta construção. Principalmente porque as pessoas são juizes muito pobres do que deve ser otimizado. O JITer é um juiz muito melhor.
Para citar Eric Gunnerson
inlining acontece no nível JIT, eo JIT geral toma uma decisão decente