컴파일을 위한 런타임 구성 옵션
이 문서에서는 .NET 컴파일을 구성하는 데 사용할 수 있는 설정을 자세히 살펴봅니다.
참고 항목
.NET 6은 .NET 런타임 동작을 구성하는 환경 변수에 대해 COMPlus_
대신 접두사 DOTNET_
을 표준화합니다. 그러나 COMPlus_
접두사도 계속 작동합니다. 이전 버전의 .NET 런타임을 사용하는 경우에도 환경 변수에 COMPlus_
접두사를 사용해야 합니다.
계층화된 컴파일
- JIT(Just-In-Time) 컴파일러가 계층화된 컴파일을 사용하는지 여부를 구성합니다. 계층화된 컴파일은 두 계층을 통해 메서드를 전환합니다.
- 첫 번째 계층은 코드를 더 빠르게 생성(빠른 JIT)하거나 미리 컴파일된 코드(ReadyToRun)를 로드합니다.
- 두 번째 계층은 백그라운드에서 최적화된 코드를 생성합니다("JIT 최적화").
- .NET Core 3.0 이상에서는 기본적으로 계층화된 컴파일이 사용하도록 설정됩니다.
- .NET Core 2.1 및 2.2에서는 기본적으로 계층화된 컴파일이 사용하지 않도록 설정됩니다.
- 자세한 내용은 계층화된 컴파일 가이드를 참조하세요.
설정 이름 | 값 | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation |
true - 사용false - 사용 안 함 |
MSBuild 속성 | TieredCompilation |
true - 사용false - 사용 안 함 |
환경 변수 | COMPlus_TieredCompilation 또는 DOTNET_TieredCompilation |
1 - 사용0 - 사용 안 함 |
예제
runtimeconfig.json 파일:
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation": false
}
}
}
runtimeconfig.template.json 파일:
{
"configProperties": {
"System.Runtime.TieredCompilation": false
}
}
프로젝트 파일:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilation>false</TieredCompilation>
</PropertyGroup>
</Project>
빠른 JIT
- JIT 컴파일러가 빠른 JIT를 사용하는지 여부를 구성합니다. 루프를 포함되어 있지 않고 미리 컴파일된 코드를 사용할 수 없는 메서드의 경우 빠른 JIT는 최적화하지 않고도 빠르게 컴파일합니다.
- 빠른 JIT를 사용하도록 설정하면 시작 시간이 단축되지만 성능 특성이 저하된 코드가 생성될 수 있습니다. 예를 들어 코드에서 더 많은 스택 공간을 사용하고, 더 많은 메모리를 할당하며 느리게 실행될 수 있습니다.
- 빠른 JIT를 사용하지 않도록 설정하고 계층화된 컴파일을 사용하도록 설정한 경우에는 미리 컴파일된 코드만 계층화된 컴파일에 참여합니다. 메서드를 ReadyToRun으로 미리 컴파일하지 않은 경우 JIT 동작은 계층화된 컴파일이 사용하지 않도록 설정된 것과 같습니다.
- .NET Core 3.0 이상에서는 기본적으로 빠른 JIT가 사용하도록 설정됩니다.
- .NET Core 2.1 및 2.2에서는 기본적으로 빠른 JIT가 사용하지 않도록 설정됩니다.
설정 이름 | 값 | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation.QuickJit |
true - 사용false - 사용 안 함 |
MSBuild 속성 | TieredCompilationQuickJit |
true - 사용false - 사용 안 함 |
환경 변수 | COMPlus_TC_QuickJit 또는 DOTNET_TC_QuickJit |
1 - 사용0 - 사용 안 함 |
예제
runtimeconfig.json 파일:
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation.QuickJit": false
}
}
}
runtimeconfig.template.json 파일:
{
"configProperties": {
"System.Runtime.TieredCompilation.QuickJit": false
}
}
프로젝트 파일:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilationQuickJit>false</TieredCompilationQuickJit>
</PropertyGroup>
</Project>
루프에 대한 빠른 JIT
- JIT 컴파일러가 루프를 포함하는 메서드에서 빠른 JIT를 사용할지 여부를 구성합니다.
- 루프에 대한 빠른 JIT를 사용하도록 설정하면 시작 성능이 향상될 수 있습니다. 그러나 장기 실행 루프의 경우 오랜 기간 동안 덜 최적화된 코드에서 중단될 수 있습니다.
- 빠른 JIT를 사용하지 않도록 설정한 경우에는 이 설정이 적용되지 않습니다.
- 이 설정을 생략하면 루프를 포함하는 메서드에 대해 빠른 JIT가 사용되지 않습니다. 이는 값을
false
으로 설정하는 것과 같습니다.
설정 이름 | 값 | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation.QuickJitForLoops |
false - 사용 안 함true - 사용 |
MSBuild 속성 | TieredCompilationQuickJitForLoops |
false - 사용 안 함true - 사용 |
환경 변수 | COMPlus_TC_QuickJitForLoops 또는 DOTNET_TC_QuickJitForLoops |
0 - 사용 안 함1 - 사용 |
예제
runtimeconfig.json 파일:
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation.QuickJitForLoops": false
}
}
}
runtimeconfig.template.json 파일:
{
"configProperties": {
"System.Runtime.TieredCompilation.QuickJitForLoops": false
}
}
프로젝트 파일:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilationQuickJitForLoops>true</TieredCompilationQuickJitForLoops>
</PropertyGroup>
</Project>
ReadyToRun
- .NET Core 런타임이 사용 가능한 ReadyToRun 데이터가 포함된 이미지에 미리 컴파일된 코드를 사용하도록 할지 여부를 구성합니다. 이 옵션을 사용하지 않도록 설정하면 런타임에서 프레임워크 코드를 강제로 JIT 컴파일하게 합니다.
- 자세한 내용은 실행 준비를 참조하세요.
- 이 설정을 생략하면 .NET은 사용 가능한 경우 ReadyToRun 데이터를 사용합니다. 이는 값을
1
으로 설정하는 것과 같습니다.
설정 이름 | 값 | |
---|---|---|
환경 변수 | COMPlus_ReadyToRun 또는 DOTNET_ReadyToRun |
1 - 사용0 - 사용 안 함 |
프로필 기반 최적화
이 설정을 사용하면 .NET 6 이상 버전에서 동적(계층화된) PGO(프로필 기반 최적화)를 사용할 수 있습니다.
설정 이름 | 값 | |
---|---|---|
환경 변수 | DOTNET_TieredPGO |
1 - 사용0 - 사용 안 함 |
MSBuild 속성 | TieredPGO |
true - 사용false - 사용 안 함 |
PGO(프로필 기반 최적화)는 JIT 컴파일러가 가장 자주 사용되는 형식 및 코드 경로 측면에서 최적화된 코드를 생성하는 곳입니다. 동적 PGO는 계층화된 컴파일과 함께 작동하여 계층 0 중에 배치되는 추가 계측에 따라 코드를 더욱 최적화합니다.
예제
프로젝트 파일:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredPGO>true</TieredPGO>
</PropertyGroup>
</Project>
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET