Opções de configuração de runtime para compilação
Este artigo detalha as configurações que você pode usar para a compilação do .NET.
Observação
O .NET 6 usa o prefixo DOTNET_
como padrão em vez de COMPlus_
para variáveis de ambiente que configuram o comportamento de tempo de execução do .NET. No entanto, o prefixo COMPlus_
continuará funcionando. Se você estiver usando uma versão anterior do runtime do .NET, ainda deverá usar o prefixo COMPlus_
para variáveis de ambiente.
Compilação em camadas
- Configura se o compilador JIT (just-in-time) usa compilação em camadas. A compilação em camadas faz a transição de métodos por duas camadas:
- A primeira camada gera código mais rapidamente (JIT rápido) ou carrega o código pré-compilado (ReadyToRun).
- A segunda camada gera código otimizado em segundo plano ("JIT otimizado").
- No .NET Core 3.0 e posterior, a compilação em camadas é habilitada por padrão.
- No .NET Core 2.1 e 2.2, a compilação em camadas é desabilitada por padrão.
- Para mais informações, confira Guia de compilação em camadas.
Nome da configuração | Valores | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation |
true - habilitadofalse -desabilitado |
Propriedade do MSBuild | TieredCompilation |
true - habilitadofalse -desabilitado |
Variável de ambiente | COMPlus_TieredCompilation ou DOTNET_TieredCompilation |
1 - habilitado0 -desabilitado |
Exemplos
Arquivo runtimeconfig.json:
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation": false
}
}
}
Arquivo runtimeconfig.template.json:
{
"configProperties": {
"System.Runtime.TieredCompilation": false
}
}
Arquivo de projeto:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilation>false</TieredCompilation>
</PropertyGroup>
</Project>
JIT Rápido
- Configura se o compilador JIT usa JIT rápido. Para métodos que não contêm loops e para os quais o código pré-compilado não está disponível, o JIT rápido os compila mais rapidamente, mas sem otimizações.
- Habilitar o JIT rápido diminui o tempo de inicialização, mas pode produzir código com características de desempenho degradadas. Por exemplo, o código pode usar mais espaço de pilha, alocar mais memória e executar mais lentamente.
- Se o JIT rápido estiver desabilitado, mas a compilação em camadas estiver habilitada, apenas o código pré-compilado participará da compilação em camadas. Se um método não for pré-compilado com ReadyToRun, o comportamento JIT será o mesmo que se a compilação em camadas estivesse desabilitada.
- No .NET Core 3.0 e posterior, o JIT rápido é habilitado por padrão.
- No .NET Core 2.1 e 2.2, o JIT rápido é desabilitado por padrão.
Nome da configuração | Valores | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation.QuickJit |
true - habilitadofalse -desabilitado |
Propriedade do MSBuild | TieredCompilationQuickJit |
true - habilitadofalse -desabilitado |
Variável de ambiente | COMPlus_TC_QuickJit ou DOTNET_TC_QuickJit |
1 - habilitado0 -desabilitado |
Exemplos
Arquivo runtimeconfig.json:
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation.QuickJit": false
}
}
}
Arquivo runtimeconfig.template.json:
{
"configProperties": {
"System.Runtime.TieredCompilation.QuickJit": false
}
}
Arquivo de projeto:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilationQuickJit>false</TieredCompilationQuickJit>
</PropertyGroup>
</Project>
JIT rápido para loops
- Configura se o compilador JIT usa JIT rápido em métodos que contêm loops.
- Habilitar o JIT rápido para loops pode melhorar o desempenho da inicialização. No entanto, loops de execução longa podem ficar presos em código menos otimizado por longos períodos.
- Se o JIT rápido estiver desabilitado, essa configuração não terá efeito.
- Se você omitir essa configuração, o JIT rápido não será usado para métodos que contêm loops. Isso é equivalente a definir o valor
false
.
Nome da configuração | Valores | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation.QuickJitForLoops |
false -desabilitadotrue - habilitado |
Propriedade do MSBuild | TieredCompilationQuickJitForLoops |
false -desabilitadotrue – Habilitado |
Variável de ambiente | COMPlus_TC_QuickJitForLoops ou DOTNET_TC_QuickJitForLoops |
0 -desabilitado1 - habilitado |
Exemplos
Arquivo runtimeconfig.json:
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation.QuickJitForLoops": false
}
}
}
Arquivo runtimeconfig.template.json:
{
"configProperties": {
"System.Runtime.TieredCompilation.QuickJitForLoops": false
}
}
Arquivo de projeto:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilationQuickJitForLoops>true</TieredCompilationQuickJitForLoops>
</PropertyGroup>
</Project>
ReadyToRun
- Configura se o runtime do .NET Core usa código pré-compilado para imagens com dados ReadyToRun disponíveis. Desabilitar essa opção força o runtime a compilar código JIT da estrutura.
- Para obter mais informações, consulte Pronto para execução.
- Se você omitir essa configuração, o .NET usará dados ReadyToRun quando eles estiverem disponíveis. Isso é equivalente a definir o valor
1
.
Nome da configuração | Valores | |
---|---|---|
Variável de ambiente | COMPlus_ReadyToRun ou DOTNET_ReadyToRun |
1 - habilitado0 -desabilitado |
Otimização guiada por perfil
Essa configuração habilita a otimização dinâmica (hierárquica) guiada por perfil (PGO) no .NET 6 e versões posteriores.
Nome da configuração | Valores | |
---|---|---|
Variável de ambiente | DOTNET_TieredPGO |
1 – Habilitado0 -desabilitado |
Propriedade do MSBuild | TieredPGO |
true - habilitadofalse -desabilitado |
É na PGO (otimização guiada por perfil) que o compilador JIT gera o código otimizado em termos dos tipos e caminhos de código usados com mais frequência. O PGO dinâmico trabalha lado a lado com a compilação hierárquica para otimizar ainda mais o código com base na instrumentação adicional implementada durante a camada 0.
Exemplos
Arquivo de projeto:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredPGO>true</TieredPGO>
</PropertyGroup>
</Project>