Requisitos: Ao olhar o código-fonte do .NET, percebi que alguns métodos adicionaram o recurso [MethodImpl(MethodImplOptions.AggressiveInlining)], mas vi que o recurso MethodImpl pode afetar o comportamento do compilador JIT. Alguns testes foram realizados com base em informações da Internet.
Configuração MethodImplOptions
Código:
Função inline
Em ciência da computação, uma função inline (às vezes chamada de função online ou função de expansão em tempo de compilação) é uma construção de linguagem de programação usada para sugerir que o compilador faça extensões em linha (às vezes chamadas de extensões online) para algumas funções especiais; Isso significa que o compilador insere e substitui o corpo da função especificado no lugar de cada lugar (contexto) onde a função é chamada, economizando o tempo adicional gasto em cada chamada para a função. No entanto, ao optar por usar funções inline, é necessário ponderar o espaço ocupado pelo programa e a eficiência da execução, pois funções complexas demais para expansão em linha gerarão grandes despesas com recursos de armazenamento. Também é importante notar que extensões inline de funções recursivas podem causar compilação infinita de alguns compiladores.
MétodoImplOpções.AgressivoInlining
Função: Recomenda-se que o compilador JIT integre o método o máximo possível. Explicação: Inline refere-se à substituição de uma chamada de função pelo próprio corpo da função, reduzindo assim a sobrecarga da chamada de função. Cenários aplicáveis: Adequado para métodos pequenos, frequentemente chamados (por exemplo, acessores de atributos, cálculos matemáticos simples, etc.). Nota: Isso é apenas uma "sugestão", o compilador JIT pode decidir se realmente faz inline ou não, dependendo da situação real.
Os resultados do teste "inline" e "not inline" são os seguintes:
O código do teste é o seguinte:
Descobriu-se que o uso da CPU após o inline era muito menor do que o das chamadas não inline, na verdade, tambémNão fique muito ansioso, os compiladores de hoje são muito inteligentes, mesmo sem adicionar esse recurso, o compilador pode ajudar você a otimizar automaticamente。 |