Otimização adaptativa no .NET Core 2.1 \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 22 Horas 

 34 Min 

 04 Seg 

   Tempo restante da oferta: 22 34 04 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Otimização adaptativa no .NET Core 2.1  [ ASP .NET ](https://www.treinaweb.com.br/blog/categoria/asp-net) [ .NET Core ](https://www.treinaweb.com.br/blog/categoria/net-core) 

# Otimização adaptativa no .NET Core 2.1

 Aprenda como otimizar a sua aplicação .NET Core com a Tiered Compilation.

 [ Wladimilson M. Nascimento ](https://www.treinaweb.com.br/blog/autor/wladimilson-m-nascimento) 8 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/08/12165905/net-core.png)  

Ao desenvolver um sistema utilizando uma linguagem de alto nível, sempre teremos o custo do processo de compilação. Mesmo que não ganhe muito destaque, no final este será o processo que definirá a performance da aplicação.

Linguagens consideradas “mais rápidas”, como C, geram aplicações mais performáticas porque durante o processo de compilação estática são realizadas várias otimizações, visando o ambiente definido. Este é um dos motivos que em ambiente Unix drivers, bibliotecas e outras aplicações, as vezes precisam ser compiladas localmente antes de serem instaladas no sistema.

Em linguagens de alto nível, geralmente o código não é compilado diretamente para a linguagem de máquina. Ele é compilado para uma camada intermediária e dela para a linguagem de máquina. Como pode ser ilustrado pela arquitetura do .NET demostrado na imagem abaixo:

![](https://dkrn4sk0rn31v.cloudfront.net/2018/08/17172517/dotnet-core.png)

Neste tipo de arquitetura, esta camada intermediária as vezes recebe o nome de máquina virtual, já que pode emular um ambiente, o responsável por executar o código intermediário da aplciação, em qualquer sistema. Um exemplo clássico disso é a Java Virtual Machine (JVM).

E será esta máquina virtual que definirá a performance da aplicação. Quanto mais eficiente for, mais performáticas podem ser as aplicações desenvolvidas. Por esses motivos que existem máquinas virtuais, como a [HHVM](https://hhvm.com/), que tem por objetivo otimizar as aplicações desenvolvidas em PHP (com o fim do suporte agora em 2018) e [Hack](https://hacklang.org/ "Hack").

Entrando no .NET, nele não há uma máquina virtual clara, mas como é possível ver na imagem da arquitetura acima, ele possui uma camada que é responsável por intermediar a execução do código intermediário em código de máquina.

[  ![C# (C Sharp) - Introdução ao ASP.NET Core](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/csharp.svg)   Curso C# (C Sharp) - Introdução ao ASP.NET Core Conhecer o curso ](https://www.treinaweb.com.br/curso/csharp-avancado-introducao-ao-aspnet-core)

## CoreCLR

Ao desenvolvermos uma aplicação em qualquer linguagem suportada pelo .NET Core, antes dela ser executada, o código é convertido para uma linguagem intermediária (a MSIL, que traduzido literalmente significa linguagem intermediária), e o **CoreCLR** ficará responsável por converter este código IL em linguagem de máquina.

É esta camada que realiza todo o processo de otimização das aplicações .NET Core. Além que garantir que o código é seguro, não gera vazamento de memória, entre outros recursos. Geralmente ele tem que decidir se irá gerar um código de rápida inicialização, com pouca otimização, ou se irá implementar uma grande otimização, atrasando a sua inicialização.

Sendo um sucessor do CLR do .NET Framework, o **CoreCLR** tomava esta decisão uma vez, pois se o código de máquina de um método já estivesse gerado, este sempre seria utilizado quando este método fosse referenciado no código.

A primeira vista, otimizar todos os métodos parece ser a melhor opção, mas em alguns casos, o método pode ser pouco utilizado, que não compensa o custo de otimização.

Visando melhorar a performance das aplicações .NET Core, na versão 2.1 desta biblioteca, o **CoreCLR** foi motificado, adicionando o suporte a **tiered compilation** (compilação em camadas), também conhecida como *otimização adaptativa*.

### Tiered Compilation

Na otimização adaptiva a máquina virtual tem mais opções. Ela pode gerar um código “sujo” de rápida inicialização, e se notar que o método é muito utilizado, posteriormente pode otimizá-lo para obter máxima performance.

Na implementação deste recurso no **CoreCLR**, isso significa que agora um método pode ter várias compilações que podem ser substituídas durante a execução da aplicação. Desta forma, pode-se obter por uma rápida inicialização ou por otimização:

- **Rápida inicialização:** Quando uma aplicação é iniciada, ela aguarda o código intermediário a ser convertido em linguagem de máquina. A **tiered compilation** pede para ser gerada uma compilação inicial rapidamente, mesmo que seja necessário sacrificar a qualidade da otimização. Caso o método seja chamado frequentemente, um código mais otimizado é gerado em background, e ele substituí o código gerado inicialmente, para se obter mais performance.
- **Otimização:** Em uma aplicação .NET típica, a maioria do código da biblioteca é gerado de imagens pré-compiladas. O que é muito bom para uma rápida inicialização, mas as imagens pré-compiladas possuem restrições de versões e instruções de CPU que limitam a otimização. Para cada método dessas imagens que são frequentemente chamados, a **tiered compilation** pede para ser gerada em background uma nova compilação mais otimizada, que substituirá a versão pré-compilada.

### Resultados

Você pode estar se perguntando, o quão rápido uma aplicação pode ser com este tipo de compilação. Nos testes da equipe do .NET, eles obtiveram uma melhoria de uns 35%. Em alguns casos até mais, como é possível ver nos gráficos abaixo:

![](https://dkrn4sk0rn31v.cloudfront.net/2018/08/17171549/asp_net_startup.png)

![](https://dkrn4sk0rn31v.cloudfront.net/2018/08/17171553/asp_net_steady_state.png)

Em aplicações que utilizamos internamente aqui na TreinaWeb, obtivemos uma melhora de cerca de 40%.

### Testando nas suas aplicações

No momento, este recurso está em fase beta. Caso esteja utilizando a última versão de preview do .NET Core 2.2, ele já está ativo por padrão, mas no .NET Core 2.1 é necessário ativá-lo no seu ambiente.

Caso queria ativar a **tiered compilation** para todas as suas aplicações, adicione nas variáveis de ambiente do seu sistema a variável abaixo:

```text
COMPlus_TieredCompilation="1"

```

Para ativá-la em uma aplicação que esteja sendo desenvolvida, adicione no arquivo de configuração do projeto a tag `TieredCompilation`:

```xml

   true

```

Já para um projeto que que esteja rodando, você pode adicionar o atributo `System.Runtime.TieredCompilation` no arquivo **configProperties** dele:

```json
{
    "runtimeOptions": {
        "configProperties": {
            "System.Runtime.TieredCompilation": true
        }
    },
    "framework": {
        ...
    }
}

```

## Conclusão

A otimização adaptativa ainda está em fase beta no .NET Core 2.1, mas devido aos seus beneficios, é um recurso que vale a pena ser testado.

Caso encontre qualquer bug, não hesite em informar para a equipe do CoreCLR na sua [página](https://github.com/dotnet/coreclr/issues/4331) no git.

[  ![C# (C Sharp) Básico](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/csharp.svg)   Curso C# (C Sharp) Básico Conhecer o curso ](https://www.treinaweb.com.br/curso/csharp-basico)

- [ #.NET Core ](https://www.treinaweb.com.br/blog/tag/net-core)
- [ #.NET Core 2.1 ](https://www.treinaweb.com.br/blog/tag/net-core-2-1)
- [ #CoreCLR ](https://www.treinaweb.com.br/blog/tag/coreclr)

Autor

 ![Wladimilson M. Nascimento](//secure.gravatar.com/avatar/f0dd442f156a3eacd2880e9cd0eafbd1?d=mm)

## Wladimilson M. Nascimento

 Instrutor, nerd, cinéfilo e desenvolvedor nas horas vagas. Graduado em Ciências da Computação pela Universidade Metodista de São Paulo. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/wladimilson-m-nascimento)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/07/SEO-WORDPRESS-YOAST-400x280.png)  [ CMS's e E-commerce ](https://www.treinaweb.com.br/blog/categoria/cmss-e-e-commerce) 

     6 anos atrás

    ##  [ Otimizando conteúdo para SEO no Wordpress com Yoast ](https://www.treinaweb.com.br/blog/otimizando-conteudo-para-seo-no-wordpress-com-yoast) 

     Aprenda a otimizar o SEO de suas páginas e posts utilizando o Plugin Yoast SEO para Wordpress e eleve os resultados do seu blog!

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/spring-framework-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     3 anos atrás

    ##  [ Trabalhando com Scheduled Tasks no Spring Boot ](https://www.treinaweb.com.br/blog/trabalhando-com-scheduled-tasks-no-spring-boot) 

     Descubra o poder das Scheduled Tasks no Spring Boot. Aprenda a criar, configurar e aprimorar tarefas agendadas em Java com o Spring Framework.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/10/22110927/FRAMEWORKS-CSS-400x280.png)  [ CSS ](https://www.treinaweb.com.br/blog/categoria/css) 

     8 anos atrás

    ##  [ Os principais frameworks CSS ](https://www.treinaweb.com.br/blog/os-principais-frameworks-css) 

     Neste artigo veremos alguns dos principais frameworks CSS do mercado e algumas de suas características.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/10/o-que-e-e-como-comecar-com-golang-400x280.jpg)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Entendendo ponteiros na Golang ](https://www.treinaweb.com.br/blog/entendendo-ponteiros-na-golang) 

     Neste artigo veremos sobre os ponteiros na Golang. Vamos entender o que são ponteiros, quais suas vantagens e desvantagens e como utilizá-los.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/02/CSS-JS-400x280.jpg)  [ CSS ](https://www.treinaweb.com.br/blog/categoria/css) 

     4 anos atrás

    ##  [ O que é PostCSS e suas funcionalidades ](https://www.treinaweb.com.br/blog/o-que-e-postcss-e-suas-funcionalidades) 

     Neste artigo veremos uma ferramenta que vem auxiliando muito os desenvolvedores durante seus projetos, sendo ela, PostCSS.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/10/big-data-x-data-analytics-x-data-science-quais-as-diferencas-400x280.png)  [ Tecnologia ](https://www.treinaweb.com.br/blog/categoria/tecnologia) 

     6 anos atrás

    ##  [ Big Data x Data Analytics x Data Science: quais as diferenças? ](https://www.treinaweb.com.br/blog/big-data-x-data-analytics-x-data-science-quais-as-diferencas) 

     Confira neste artigo as diferenças entre Big Data, Data Analytics e Data Science, além de conhecer o foco de cada uma delas.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/09/Quality-Assurance-400x280.png)  [ Testes e Projetos ](https://www.treinaweb.com.br/blog/categoria/testes-e-projetos) 

     6 anos atrás

    ##  [ Quality Assurance (QA) e sua importância no desenvolvimento de software ](https://www.treinaweb.com.br/blog/quality-assurance-qa-e-sua-importancia-no-desenvolvimento-de-software) 

     Aplicar os métodos de QA geram confiança e segurança aos clientes, indicando que os seus produtos terão a qualidade esperada na etapa de implantação.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/08/o-que-e-magento-400x280.png)  [ Magento ](https://www.treinaweb.com.br/blog/categoria/magento) 

     6 anos atrás

    ##  [ O que é Magento? ](https://www.treinaweb.com.br/blog/o-que-e-magento) 

     Veja neste artigo o que é o Magento.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/08/28112233/capa-SPA-400x280.png)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     7 anos atrás

    ##  [ O que são aplicações SPA? ](https://www.treinaweb.com.br/blog/o-que-sao-aplicacoes-spa) 

     Neste artigo, vamos abordar o que são as aplicações baseadas em tecnologias SPA e o porquê de estas fazerem tanto sucesso nos dias atuais.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/08/01225056/CERTIFICADO-SSL-400x280.png)  [ Tecnologia ](https://www.treinaweb.com.br/blog/categoria/tecnologia) 

     7 anos atrás

    ##  [ Para que serve o certificado SSL? ](https://www.treinaweb.com.br/blog/para-que-serve-o-certificado-ssl) 

     Confira neste artigo o que é um certificado SSL e como ele funciona.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/06/27155937/js-symbol-400x280.png)  [ Javascript ](https://www.treinaweb.com.br/blog/categoria/javascript) 

     8 anos atrás

    ##  [ JavaScript: você sabe o que são e por que usar Symbols? ](https://www.treinaweb.com.br/blog/javascript-voce-sabe-o-que-sao-e-por-que-usar-symbols) 

     Descubra a utilidade dos Symbols no JavaScript, novo tipo primitivo introduzido no ES2015.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/05/01125223/react-php-imagem-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     8 anos atrás

    ##  [ Introdução à programação assíncrona em PHP usando o ReactPHP ](https://www.treinaweb.com.br/blog/introducao-a-programacao-assincrona-em-php-usando-o-reactphp) 

     Uma introdução à programação assíncrona com PHP e uso básico dos componentes do ReactPHP.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **22h 34min 04s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
