Futásidejű konfigurációs beállítások fordításhoz

Ez a cikk a .NET-fordítás konfigurálásához használható beállításokat ismerteti.

Feljegyzés

A .NET 6 az előtagon DOTNET_ szabványosítja a .NET futásidejű viselkedést konfiguráló környezeti változók helyett COMPlus_ . Az COMPlus_ előtag azonban továbbra is működni fog. Ha a .NET-futtatókörnyezet egy korábbi verzióját használja, akkor is használja a COMPlus_ környezeti változók előtagját.

Rétegzett fordítás

  • Konfigurálja, hogy a just-in-time (JIT) fordító rétegzett fordítást használ-e. A rétegzett fordítás két szinten áttűnés a metódusokat:
    • Az első szint gyorsabban generál kódot (gyors JIT), vagy betölti az előre lefordított kódot (ReadyToRun).
    • A második réteg optimalizált kódot hoz létre a háttérben ("a JIT optimalizálása").
  • A .NET Core 3.0-s és újabb verzióiban a rétegzett fordítás alapértelmezés szerint engedélyezve van.
  • A .NET Core 2.1-ben és 2.2-ben a rétegzett fordítás alapértelmezés szerint le van tiltva.
  • További információkért tekintse meg a rétegzett fordítási útmutatót.
A beállítás neve Értékek
runtimeconfig.json System.Runtime.TieredCompilation true -Engedélyezve
false -Tiltva
MSBuild tulajdonság TieredCompilation true -Engedélyezve
false -Tiltva
Környezeti változó COMPlus_TieredCompilation vagy DOTNET_TieredCompilation 1 -Engedélyezve
0 -Tiltva

Példák

runtimeconfig.json fájl:

{
   "runtimeOptions": {
      "configProperties": {
         "System.Runtime.TieredCompilation": false
      }
   }
}

runtimeconfig.template.json fájl:

{
   "configProperties": {
      "System.Runtime.TieredCompilation": false
   }
}

Projektfájl:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TieredCompilation>false</TieredCompilation>
  </PropertyGroup>

</Project>

Gyors JIT

  • Konfigurálja, hogy a JIT-fordító gyors JIT-t használ-e. Azok a metódusok, amelyek nem tartalmaznak hurkokat, és amelyekhez az előre lefordított kód nem érhető el, a gyors JIT gyorsabban, optimalizálás nélkül fordítja le őket.
  • A gyors JIT engedélyezése csökkenti az indítási időt, de csökkentett teljesítményjellemzőkkel rendelkező kódot hozhat létre. Előfordulhat például, hogy a kód több veremterületet használ, több memóriát foglal le, és lassabban fut.
  • Ha a gyors JIT le van tiltva, de a rétegzett fordítás engedélyezve van, csak az előre lefordított kód vesz részt a rétegzett fordításban. Ha egy metódus nincs előre lefordítva a ReadyToRun használatával, a JIT viselkedése megegyezik azzal, mintha a rétegzett fordítás le lett tiltva.
  • A .NET Core 3.0-s és újabb verzióiban a gyors JIT alapértelmezés szerint engedélyezve van.
  • A .NET Core 2.1-ben és 2.2-ben a gyors JIT alapértelmezés szerint le van tiltva.
A beállítás neve Értékek
runtimeconfig.json System.Runtime.TieredCompilation.QuickJit true -Engedélyezve
false -Tiltva
MSBuild tulajdonság TieredCompilationQuickJit true -Engedélyezve
false -Tiltva
Környezeti változó COMPlus_TC_QuickJit vagy DOTNET_TC_QuickJit 1 -Engedélyezve
0 -Tiltva

Példák

runtimeconfig.json fájl:

{
   "runtimeOptions": {
      "configProperties": {
         "System.Runtime.TieredCompilation.QuickJit": false
      }
   }
}

runtimeconfig.template.json fájl:

{
   "configProperties": {
      "System.Runtime.TieredCompilation.QuickJit": false
   }
}

Projektfájl:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TieredCompilationQuickJit>false</TieredCompilationQuickJit>
  </PropertyGroup>

</Project>

Gyors JIT hurkokhoz

  • Konfigurálja, hogy a JIT-fordító használ-e gyors JIT-t hurkokat tartalmazó metódusokon.
  • A gyors JIT hurkokhoz való engedélyezése javíthatja az indítási teljesítményt. A hosszú ideig futó hurkok azonban hosszú ideig elakadhatnak a kevésbé optimalizált kódban.
  • Ha a gyors JIT le van tiltva, ennek a beállításnak nincs hatása.
  • Ha kihagyja ezt a beállítást, a gyors JIT nem használható hurkokat tartalmazó metódusokhoz. Ez egyenértékű az érték falsebeállításával.
A beállítás neve Értékek
runtimeconfig.json System.Runtime.TieredCompilation.QuickJitForLoops false -Tiltva
true -Engedélyezve
MSBuild tulajdonság TieredCompilationQuickJitForLoops false -Tiltva
true -Engedélyezve
Környezeti változó COMPlus_TC_QuickJitForLoops vagy DOTNET_TC_QuickJitForLoops 0 -Tiltva
1 -Engedélyezve

Példák

runtimeconfig.json fájl:

{
   "runtimeOptions": {
      "configProperties": {
         "System.Runtime.TieredCompilation.QuickJitForLoops": false
      }
   }
}

runtimeconfig.template.json fájl:

{
   "configProperties": {
      "System.Runtime.TieredCompilation.QuickJitForLoops": false
   }
}

Projektfájl:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TieredCompilationQuickJitForLoops>true</TieredCompilationQuickJitForLoops>
  </PropertyGroup>

</Project>

ReadyToRun

  • Konfigurálja, hogy a .NET Core-futtatókörnyezet előre lefordított kódot használ-e a rendelkezésre álló ReadyToRun-adatokkal rendelkező képekhez. Ha letiltja ezt a beállítást, a futtatókörnyezetet JIT-fordítási keretrendszerkódra kényszeríti.
  • További információ: Futtatásra kész.
  • Ha kihagyja ezt a beállítást, a .NET ReadyToRun-adatokat használ, ha az elérhető. Ez egyenértékű az érték 1beállításával.
A beállítás neve Értékek
Környezeti változó COMPlus_ReadyToRun vagy DOTNET_ReadyToRun 1 -Engedélyezve
0 -Tiltva

Profilvezérelt optimalizálás

Ez a beállítás lehetővé teszi a dinamikus (rétegzett) profilalapú optimalizálást (PGO) a .NET 6-os és újabb verzióiban.

A beállítás neve Értékek
Környezeti változó DOTNET_TieredPGO 1 -Engedélyezve
0 -Tiltva
MSBuild tulajdonság TieredPGO true -Engedélyezve
false -Tiltva

A profilalapú optimalizálás (PGO) segítségével a JIT-fordító optimalizált kódot hoz létre a leggyakrabban használt típusok és kódelérési utak alapján. A dinamikus PGO együttműködik a rétegzett fordítással, hogy tovább optimalizálja a kódot a 0. rétegben üzembe helyezett további rendszerezések alapján.

Példák

Projektfájl:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TieredPGO>true</TieredPGO>
  </PropertyGroup>

</Project>