Pergunta

O que é inlining?

O que é utilizado?

Can-lhe algo em linha em C #?

Foi útil?

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.

Mais sobre inlining

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.

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