Note
ãã®ããŒãžã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ èŠã§ãã ãµã€ã³ã€ã³ãŸãã¯ãã£ã¬ã¯ããªã®å€æŽã詊ãããšãã§ããŸãã
ãã®ããŒãžã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ èŠã§ãã ãã£ã¬ã¯ããªã®å€æŽã詊ãããšãã§ããŸãã
ãã®ããŒãžã«ã¯ã.NET ã©ã³ã¿ã€ã ã¬ããŒãž ã³ã¬ã¯ã¿ãŒ (GC) ã®èšå®ã«é¢ããæ å ±ãå«ãŸããŠããŸãã å®è¡äžã®ã¢ããªã®ããŒã¯æã®ããã©ãŒãã³ã¹ãå®çŸããããšããŠããå Žåã¯ããããã®èšå®ã®äœ¿çšãæ€èšããŠãã ããã ããããäžè¬çãªç¶æ³ã§ã¯ãæ¢å®å€ã§ã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã«æé©ãªããã©ãŒãã³ã¹ãåŸãããŸãã
ãã®ããŒãžã§ã¯ãèšå®ã¯ã°ã«ãŒãã«ãŸãšããããŸãã åã°ã«ãŒãå ã®èšå®ã¯äžè¬çã«ãç¹å®ã®çµæãåŸãããã«çžäºã«çµã¿åãããŠäœ¿çšãããŸãã
ã¡ã¢
- ãããã®æ§æã¯ãGC ãåæåããããšã (éåžžã¯ããã»ã¹ã®èµ·åæ) ã«ã®ã¿ã©ã³ã¿ã€ã ã«ãã£ãŠèªã¿åãããŸãã ããã»ã¹ãæ¢ã«å®è¡ãããŠãããšãã«ç°å¢å€æ°ã倿ŽããŠãã倿Žã¯ãã®ããã»ã¹ã«ã¯åæ ãããŸããã ãã®ããŒãžã§ã¯ã åŸ æ©æéã¬ãã«ãªã©ãå®è¡æã« API ã䜿çšããŠå€æŽã§ããèšå®ãçç¥ããŸãã
- GC ã¯ããã»ã¹ããšã«è¡ãããããããããã®æ§æããã·ã³ ã¬ãã«ã§èšå®ããããšã«æå³ã¯ã»ãšãã©ãããŸããã ããšãã°ããã·ã³äžã®ãã¹ãŠã® .NET ããã»ã¹ã§ãµãŒã㌠GC ãŸãã¯åãããŒãã®ããŒãå¶éã䜿çšããå¿ èŠã¯ãããŸããã
- æ°å€ã®å Žåãruntimeconfig.json ãŸã㯠runtimeconfig.template.json ãã¡ã€ã«ã®èšå®ã«ã¯ 10 é²è¡šèšãç°å¢å€æ°ã®èšå®ã«ã¯ 16 é²è¡šèšã䜿çšããŸãã 16 é²å€ã®å Žåã¯ããã¬ãã£ãã¯ã¹ "0x" ãä»ããŠãä»ããªããŠãæå®ã§ããŸãã
- ç°å¢å€æ°ã䜿çšããŠããå Žåã.NET 6 以éã®ããŒãžã§ã³ã§ã®ãã¬ãã£ãã¯ã¹ã®æšæºã¯ã
DOTNET_ã§ã¯ãªãCOMPlus_ã§ãã ãã ããCOMPlus_ãã¬ãã£ãã¯ã¹ã¯åŒãç¶ãæ©èœããŸãã 以åã®ããŒãžã§ã³ã® .NET ã©ã³ã¿ã€ã ã䜿çšããŠããå Žåã¯ãCOMPlus_ãã¬ãã£ãã¯ã¹ããŸã 䜿çšããå¿ èŠããããŸã (äŸ:COMPlus_gcServer)ã
æ§æãæå®ããæ¹æ³
.NET ã©ã³ã¿ã€ã ã®ããŒãžã§ã³ãç°ãªããšãæ§æå€ãæå®ããæ¹æ³ãç°ãªããŸãã æ¬¡ã®è¡šã«ãã®æŠèŠã瀺ããŸãã
| æ§æã®å Žæ | ãã®å Žæãé©çšããã .NET ããŒãžã§ã³ | åœ¢åŒ | è§£éæ¹æ³ |
|---|---|---|---|
| runtimeconfig.json file/ runtimeconfig.template.json ãã¡ã€ã« |
.NET (Core) | n | n 㯠10 鲿°å€ãšããŠè§£éãããŸãã |
| ç°å¢å€æ° | .NET Frameworkã.NET | 0xn ãŸã㯠n | n ã¯ã©ã¡ãã®åœ¢åŒã§ã 16 鲿°å€ãšããŠè§£éãããŸã |
| app.config ãã¡ã€ã« | .NET Framework | 0xn | n 㯠16 鲿°å€ãšããŠè§£éãããŸã1 |
1 app.config ãã¡ã€ã«èšå®ã§ã0x ãã¬ãã£ãã¯ã¹ãä»ããã«å€ãæå®ã§ããŸãããæšå¥šãããŸããã .NET Framework 4.8 以éã§ã¯ããã°ã«ããã0x ãã¬ãã£ãã¯ã¹ãä»ããã«æå®ããå€ã¯ 16 鲿°ãšããŠè§£éãããŸããã以åã®ããŒãžã§ã³ã®.NET Framework ã§ã¯ã10 鲿°ãšããŠè§£éãããŸãã æ§æã倿Žããå¿
èŠããªããããapp.config ãã¡ã€ã«ã§å€ãæå®ããå Žåã¯ã0x ãã¬ãã£ãã¯ã¹ã䜿çšããŸãã
ããšãã°ãGCHeapCount ãšããååã® .NET Framework ã¢ããªã«å¯Ÿãã ã®ããŒãã 12 åæå®ããã«ã¯ã次㮠XML ã A.exe.config ãã¡ã€ã«ã«è¿œå ããŸãã
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
...
<runtime>
<gcServer enabled="true"/>
<GCHeapCount>0xc</GCHeapCount>
</runtime>
</configuration>
.NET (Core) ãš .NET Framework ã®äž¡æ¹ã§ãç°å¢å€æ°ã䜿çšã§ããŸãã
.NET 6 以éã䜿çšãã Windows ã®å Žå:
SET DOTNET_gcServer=1
SET DOTNET_GCHeapCount=c
.NET 6 以éã®ããŒãžã§ã³ã䜿çšããŠããä»ã®ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã§ã¯ãæ¬¡ã®æäœãè¡ããŸãã
export DOTNET_gcServer=1
export DOTNET_GCHeapCount=c
.NET Framework ã䜿çšããŠããªãå Žåã¯ã runtimeconfig.json ãŸã㯠runtimeconfig.template.json ãã¡ã€ã«ã§å€ãèšå®ããããšãã§ããŸãã
runtimeconfig.json ãã¡ã€ã«:
{
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true,
"System.GC.HeapCount": 12
}
}
}
runtimeconfig.template.json ãã¡ã€ã«:
{
"configProperties": {
"System.GC.Server": true,
"System.GC.HeapCount": 12
}
}
ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ã®ãã¬ãŒããŒ
ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ã®äž»ãª 2 ã€ã®ãã¬ãŒããŒã¯ãã¯ãŒã¯ã¹ããŒã·ã§ã³ GC ãšãµãŒã㌠GC ã§ãã 2 ã€ã®éã®çžéç¹ã«ã€ããŠè©³ããã¯ããã¯ãŒã¯ã¹ããŒã·ã§ã³ãšãµãŒããŒã®ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ããã芧ãã ããã
ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ã®ãµããã¬ãŒããŒã¯ãããã¯ã°ã©ãŠã³ããšéåæå®è¡ã§ãã
ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ã®ãã¬ãŒããŒãéžæããã«ã¯ã以äžã®èšå®ã䜿çšããŸãã
ã¯ãŒã¯ã¹ããŒã·ã§ã³ãšãµãŒããŒ
- ã¢ããªã±ãŒã·ã§ã³ã§ãã¯ãŒã¯ã¹ããŒã·ã§ã³ ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ãšãµãŒã㌠ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ã®ã©ã¡ãã䜿çšããããæ§æããŸãã
- æ¢å®å€: ã¯ãŒã¯ã¹ããŒã·ã§ã³ ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ã ããã¯ãå€ã
falseã«èšå®ããå Žåãšåãã§ãã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.Server |
false - ã¯ãŒã¯ã¹ããŒã·ã§ã³true - ãµãŒã㌠|
.NET Core 1.0 |
| MSBuild ã®ãããã㣠| ServerGarbageCollection |
false - ã¯ãŒã¯ã¹ããŒã·ã§ã³true - ãµãŒã㌠|
.NET Core 1.0 |
| ç°å¢å€æ° | DOTNET_gcServer |
0 - ã¯ãŒã¯ã¹ããŒã·ã§ã³1 - ãµãŒã㌠|
.NET 6 |
| .NET Framework çšã® app.config | GCServer |
false - ã¯ãŒã¯ã¹ããŒã·ã§ã³true - ãµãŒã㌠|
䜿çšäŸ
runtimeconfig.json ãã¡ã€ã«:
{
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
}
}
runtimeconfig.template.json ãã¡ã€ã«:
{
"configProperties": {
"System.GC.Server": true
}
}
ãããžã§ã¯ã ãã¡ã€ã«:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup>
</Project>
ããã¯ã°ã©ãŠã³ã GC
- ããã¯ã°ã©ãŠã³ã (åæå®è¡) ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ãæå¹ã«ãããã©ãããæ§æããŸãã
- æ¢å®å€: ããã¯ã°ã©ãŠã³ã GC ã䜿çšããŸãã ããã¯ãå€ã
trueã«èšå®ããå Žåãšåãã§ãã - 詳ããã¯ããããã¯ã°ã©ãŠã³ã ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ããã芧ãã ããã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.Concurrent |
true - ããã¯ã°ã©ãŠã³ã GCfalse -éåæå®è¡ GC |
.NET Core 1.0 |
| MSBuild ã®ãããã㣠| ConcurrentGarbageCollection |
true - ããã¯ã°ã©ãŠã³ã GCfalse -éåæå®è¡ GC |
.NET Core 1.0 |
| ç°å¢å€æ° | DOTNET_gcConcurrent |
1 - ããã¯ã°ã©ãŠã³ã GC0 -éåæå®è¡ GC |
.NET 6 |
| .NET Framework çšã® app.config | gcConcurrent |
true - ããã¯ã°ã©ãŠã³ã GCfalse -éåæå®è¡ GC |
䜿çšäŸ
runtimeconfig.json ãã¡ã€ã«:
{
"runtimeOptions": {
"configProperties": {
"System.GC.Concurrent": false
}
}
}
runtimeconfig.template.json ãã¡ã€ã«:
{
"configProperties": {
"System.GC.Concurrent": false
}
}
ãããžã§ã¯ã ãã¡ã€ã«:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
</PropertyGroup>
</Project>
ã¹ã¿ã³ãã¢ãã³ GC
æ¢å®ã® GC å®è£ ã®ä»£ããã«ã¹ã¿ã³ãã¢ãã³ ã¬ããŒãž ã³ã¬ã¯ã¿ãŒã䜿çšããã«ã¯ãGC ãã€ãã£ã ã©ã€ãã©ãªã® path (.NET 9 以éã®ããŒãžã§ã³) ãŸã㯠å ã®ãããããæå®ã§ããŸãã
çµè·¯
- æ¢å®ã® GC å®è£ ã®ä»£ããã«ã©ã³ã¿ã€ã ãèªã¿èŸŒã GC ãã€ãã£ã ã©ã€ãã©ãªã®å®å šãã¹ãæå®ããŸãã ã»ãã¥ãªãã£ã§ä¿è·ããã«ã¯ããã®å Žæãæªæã®ããæ¹ããã®å¯èœæ§ããä¿è·ããå¿ èŠããããŸãã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.Path |
string_path | .NET 9 |
| ç°å¢å€æ° | DOTNET_GCPath |
string_path | .NET 9 |
åå
ããã©ã«ãã® GC å®è£ ã®ä»£ããã«ã©ã³ã¿ã€ã ãèªã¿èŸŒã GC ãã€ãã£ã ã©ã€ãã©ãªã®ååãæå®ããŸãã .NET 9 ã§ã¯ã Path æ§æã®å°å ¥ã«ããåäœã倿ŽãããŸããã
.NET 8 以åã®ããŒãžã§ã³ã§ã¯ãæ¬¡ã®æé ãå®è¡ããŸãã
- ã©ã€ãã©ãªã®ååã®ã¿ãæå®ããå Žåãã©ã€ãã©ãªã¯ .NET ã©ã³ã¿ã€ã ãšåããã£ã¬ã¯ããªã«ååšããå¿ èŠããããŸã (Windows äžã®coreclr.dll ãLinux äžã® libcoreclr.so ãOSX äžã® libcoreclr.dylib )ã
- å€ã¯ãããšãã°".ãæå®ããå Žåãªã©ãçžå¯Ÿãã¹ã«ããããšãã§ããŸããWindows ã® \clrgc.dll" ã§ã¯ã clrgc.dll 㯠.NET ã©ã³ã¿ã€ã ãã£ã¬ã¯ããªã®èŠªãã£ã¬ã¯ããªããèªã¿èŸŒãŸããŸãã
.NET 9 以éã®ããŒãžã§ã³ã§ã¯ããã®å€ã¯ãã¡ã€ã«åã®ã¿ãæå®ããŸã (ãã¹ã¯èš±å¯ãããŸãã)ã
- .NET ã¯ãã¢ããªã®
Mainã¡ãœãããå«ãã¢ã»ã³ããªãååšãããã£ã¬ã¯ããªã§æå®ããååãæ€çŽ¢ããŸãã - ãã¡ã€ã«ãèŠã€ãããªãå Žåã¯ã.NET ã©ã³ã¿ã€ã ãã£ã¬ã¯ããªãæ€çŽ¢ãããŸãã
Path æ§æãæå®ãããŠããå Žåããã®æ§æèšå®ã¯ç¡èŠãããŸãã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.Name |
string_name | .NET 7 |
| ç°å¢å€æ° | DOTNET_GCName |
string_name | .NET 6 |
LOH åºæã®èšå®
éåžžã«å€§ããªãªããžã§ã¯ããèš±å¯ãã
- åèšãµã€ãºã 2 ã®ã¬ãã€ã (GB) ãè¶ ããé åã«å¯ŸããŠã64 ããã ãã©ãããã©ãŒã ã§ã®ã¬ããŒãž ã³ã¬ã¯ã¿ãŒ ãµããŒããæ§æããŸãã
- æ¢å®å€: GC ã§ã¯ã2 GB ãè¶
ããé
åããµããŒããããŸãã ããã¯ãå€ã
1ã«èšå®ããå Žåãšåãã§ãã - ãã®ãªãã·ã§ã³ã¯ãå°æ¥ã®ããŒãžã§ã³ã® .NET ã§å»æ¢ãããå¯èœæ§ããããŸãã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | ãªã | ãªã | ãªã |
| ç°å¢å€æ° | DOTNET_gcAllowVeryLargeObjects |
1 - æå¹0 - ç¡å¹ |
.NET 6 |
| .NET Framework çšã® app.config | gcAllowVeryLargeObjects |
1 - æå¹0 - ç¡å¹ |
.NET Framework 4.5 |
倧ããªãªããžã§ã¯ã ããŒãã®ãããå€
- ãªããžã§ã¯ãã倧ããªãªããžã§ã¯ã ããŒã (LOH) ã«ç§»ãåå ãšãªãããããå€ã®ãµã€ãº (ãã€ãåäœ) ãæå®ããŸãã
- æ¢å®ã®ãããå€ã¯ 85,000 ãã€ãã§ãã
- æå®ããå€ã¯ãæ¢å®ã®ãããå€ãã倧ããããå¿ èŠããããŸãã
- ãã®å€ã¯ãçŸåšã®æ§æã§å¯èœãªæå€§ãµã€ãºãŸã§ã©ã³ã¿ã€ã ã«ãã£ãŠå¶éãããå ŽåããããŸãã å®è¡æã«äœ¿çšãããŠããå€ã¯ã GC.GetConfigurationVariables() API ã䜿çšããŠèª¿ã¹ãããšãã§ããŸãã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.LOHThreshold |
"10 é²å€" | .NET Core 3.0 |
| ç°å¢å€æ° | DOTNET_GCLOHThreshold |
"16 é²å€" | .NET 6 |
| .NET Framework çšã® app.config | GCLOHThreshold | "10 é²å€" | .NET Framework 4.8 |
ãã®æ§æèšå®ã«ã¯ç¹å®ã® MSBuild ããããã£ããããŸããã ãã ãã代ããã« RuntimeHostConfigurationOption MSBuild é
ç®ã远å ããããšãã§ããŸãã
屿§ã®å€ãšã㊠Include èšå®åã䜿çšããŸãã ããšãã°ããMSBuild ããããã£ããåç
§ããŠãã ããã
䜿çšäŸ
runtimeconfig.json ãã¡ã€ã«:
{
"runtimeOptions": {
"configProperties": {
"System.GC.LOHThreshold": 120000
}
}
}
runtimeconfig.template.json ãã¡ã€ã«:
{
"configProperties": {
"System.GC.LOHThreshold": 120000
}
}
ãã³ã
runtimeconfig.json ã§ãªãã·ã§ã³ãèšå®ããå Žåã¯ã10 é²å€ãæå®ããŸãã ç°å¢å€æ°ãšããŠãªãã·ã§ã³ãèšå®ããå Žåã¯ã16 é²å€ãæå®ããŸãã ããšãã°ããããå€ã®ãµã€ãºã 120,000 ãã€ãã«èšå®ããå Žåãå€ã¯ JSON ãã¡ã€ã«ã§ã¯ 120000ãç°å¢å€æ°ã§ã¯ 0x1D4C0 ãŸã㯠1D4C0 ã«ãªããŸãã
ãã¹ãŠã® GC ãã¬ãŒããŒã®ãªãœãŒã¹äœ¿çšéã管çãã
次ã®èšå®ã¯ãGC ã®ãã¹ãŠã®ãã¬ãŒããŒã«é©çšãããŸãã
- ããŒã ã®ããŒãå¶é
- ããŒã ããŒãå¶éç
- ãªããžã§ã¯ãããŒãããšã®ããŒãå¶é
- ãªããžã§ã¯ãããŒãããšã®ããŒãå¶éç
- 倧ããªããŒãž
- ãªãŒãžã§ã³ã®ç¯å²
- ãªãŒãžã§ã³ ãµã€ãº
- 䜿çšçã®é«ãã¡ã¢ãªã®å²å
- VM ã®ä¿æ
- ã¡ã¢ãªã®ç¯çŽ
ããŒã ã®ããŒãå¶é
- ããŒã ããŒãå¶éã¯ãGC ããŒããš GC ããã¯ããŒãã³ã°ã®æå€§ã³ããã ãµã€ãº (ãã€ãåäœ) ãšããŠå®çŸ©ãããŸãã
- ãã®èšå®ã¯ 64 ãããã®ã³ã³ãã¥ãŒã¿ãŒã«ã®ã¿è©²åœããŸãã
- ã¡ã¢ãªå¶çŽã®ããç°å¢ (ã³ã³ãããŒãªã©) ã§å®è¡ããŠããŠããã®å€ãæªèšå®ã®å Žåãæ¢å®å€ã¯ 20 MB ãŸã㯠ã³ã³ãããŒå¶éã®ããŒã ããŒãå¶éã®å²å ã®ãããã倧ããæ¹ã«ãªããŸãã
- Per-object-heap ã®ããŒãå¶éãæ§æãããŠããå Žåããã®èšå®ã¯ç¡èŠãããŸãã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.HeapHardLimit |
"10 é²å€" | .NET Core 3.0 |
| ç°å¢å€æ° | DOTNET_GCHeapHardLimit |
"16 é²å€" | .NET 6 |
ãã®æ§æèšå®ã«ã¯ç¹å®ã® MSBuild ããããã£ããããŸããã ãã ãã代ããã« RuntimeHostConfigurationOption MSBuild é
ç®ã远å ããããšãã§ããŸãã
屿§ã®å€ãšã㊠Include èšå®åã䜿çšããŸãã ããšãã°ããMSBuild ããããã£ããåç
§ããŠãã ããã
䜿çšäŸ
runtimeconfig.json ãã¡ã€ã«:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapHardLimit": 209715200
}
}
}
runtimeconfig.template.json ãã¡ã€ã«:
{
"configProperties": {
"System.GC.HeapHardLimit": 209715200
}
}
ãã³ã
runtimeconfig.json ã§ãªãã·ã§ã³ãèšå®ããå Žåã¯ã10 é²å€ãæå®ããŸãã ç°å¢å€æ°ãšããŠãªãã·ã§ã³ãèšå®ããå Žåã¯ã16 é²å€ãæå®ããŸãã ããšãã°ãããŒãã®ããŒãå¶éã 200 ã¡ããã€ã (MiB) ã«æå®ããå Žåãå€ã¯ JSON ãã¡ã€ã«ã§ã¯ 209715200ãç°å¢å€æ°ã§ã¯ 0xC800000 ãŸã㯠C800000 ã«ãªããŸãã
ããŒã ããŒãå¶éç
- ç©çã¡ã¢ãªã®åèšã«å¯Ÿããå²åãšããŠããŒã ããŒãå¶éãæå®ããŸãã
- ããã»ã¹ãèšå®ãããã¡ã¢ãªå¶é (ã³ã³ãããŒãªã©) ã䜿çšããŠç°å¢å ã§å®è¡ãããå Žåããã®å¶éã¯ç©çã¡ã¢ãªã®åèšãšããŠæ±ãããŸãã ãã®ãããªç°å¢ã§ã¯ãæ¢å®å€ã¯ 75%ã§ãã
- ãã®èšå®ã¯ 64 ãããã®ã³ã³ãã¥ãŒã¿ãŒã«ã®ã¿è©²åœããŸãã
- ãã®èšå®ã¯ã Per-object-heap ã®ããŒãå¶é ãæ§æãããŠããå ŽåããŸã㯠heap ããŒãå¶é ãæ§æãããŠããå Žåã¯ç¡èŠãããŸãã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.HeapHardLimitPercent |
"10 é²å€" | .NET Core 3.0 |
| ç°å¢å€æ° | DOTNET_GCHeapHardLimitPercent |
"16 é²å€" | .NET 6 |
ãã®æ§æèšå®ã«ã¯ç¹å®ã® MSBuild ããããã£ããããŸããã ãã ãã代ããã« RuntimeHostConfigurationOption MSBuild é
ç®ã远å ããããšãã§ããŸãã
屿§ã®å€ãšã㊠Include èšå®åã䜿çšããŸãã ããšãã°ããMSBuild ããããã£ããåç
§ããŠãã ããã
䜿çšäŸ
runtimeconfig.json ãã¡ã€ã«:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapHardLimitPercent": 30
}
}
}
runtimeconfig.template.json ãã¡ã€ã«:
{
"configProperties": {
"System.GC.HeapHardLimitPercent": 30
}
}
ãã³ã
runtimeconfig.json ã§ãªãã·ã§ã³ãèšå®ããå Žåã¯ã10 é²å€ãæå®ããŸãã ç°å¢å€æ°ãšããŠãªãã·ã§ã³ãèšå®ããå Žåã¯ã16 é²å€ãæå®ããŸãã ããšãã°ãããŒãã®äœ¿çšéã 30% ã«å¶éããå Žåãå€ã¯ JSON ãã¡ã€ã«ã§ã¯ 30ãç°å¢å€æ°ã§ã¯ 0x1E ãŸã㯠1E ã«ãªããŸãã
ãªããžã§ã¯ãããŒãããšã®ããŒãå¶é
GC ã®ããŒã ããŒãå¶éã¯ããªããžã§ã¯ã ããŒãåäœã§æå®ã§ããŸãã ããŒãã«ã¯ã倧ããªãªããžã§ã¯ã ããŒã (LOH)ãå°ããªãªããžã§ã¯ã ããŒã (SOH)ãåºå®ãªããžã§ã¯ã ããŒã (POH) ããããŸãã
-
DOTNET_GCHeapHardLimitSOHãDOTNET_GCHeapHardLimitLOHãDOTNET_GCHeapHardLimitPOHèšå®ã®ããããã®å€ãæå®ããå ŽåãDOTNET_GCHeapHardLimitSOHãšDOTNET_GCHeapHardLimitLOHã®å€ãæå®ããå¿ èŠããããŸãã ããããªããšãã©ã³ã¿ã€ã ã§ã®åæåã倱æããŸãã -
DOTNET_GCHeapHardLimitPOHã®æ¢å®å€ã¯ 0 ã§ããDOTNET_GCHeapHardLimitSOHãšDOTNET_GCHeapHardLimitLOHã«ã¯æ¢å®å€ã¯ãããŸããã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.HeapHardLimitSOH |
"10 é²å€" | .NET 5 |
| ç°å¢å€æ° | DOTNET_GCHeapHardLimitSOH |
"16 é²å€" | .NET 6 |
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.HeapHardLimitLOH |
"10 é²å€" | .NET 5 |
| ç°å¢å€æ° | DOTNET_GCHeapHardLimitLOH |
"16 é²å€" | .NET 6 |
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.HeapHardLimitPOH |
"10 é²å€" | .NET 5 |
| ç°å¢å€æ° | DOTNET_GCHeapHardLimitPOH |
"16 é²å€" | .NET 6 |
ãããã®æ§æèšå®ã«ã¯ãç¹å®ã® MSBuild ããããã£ããããŸããã ãã ãã代ããã« RuntimeHostConfigurationOption MSBuild é
ç®ã远å ããããšãã§ããŸãã
屿§ã®å€ãšã㊠Include èšå®åã䜿çšããŸãã ããšãã°ããMSBuild ããããã£ããåç
§ããŠãã ããã
ãã³ã
runtimeconfig.json ã§ãªãã·ã§ã³ãèšå®ããå Žåã¯ã10 é²å€ãæå®ããŸãã ç°å¢å€æ°ãšããŠãªãã·ã§ã³ãèšå®ããå Žåã¯ã16 é²å€ãæå®ããŸãã ããšãã°ãããŒãã®ããŒãå¶éã 200 ã¡ããã€ã (MiB) ã«æå®ããå Žåãå€ã¯ JSON ãã¡ã€ã«ã§ã¯ 209715200ãç°å¢å€æ°ã§ã¯ 0xC800000 ãŸã㯠C800000 ã«ãªããŸãã
ãªããžã§ã¯ãããŒãããšã®ããŒãå¶éç
GC ã®ããŒã ããŒãå¶éã¯ããªããžã§ã¯ã ããŒãåäœã§æå®ã§ããŸãã ããŒãã«ã¯ã倧ããªãªããžã§ã¯ã ããŒã (LOH)ãå°ããªãªããžã§ã¯ã ããŒã (SOH)ãåºå®ãªããžã§ã¯ã ããŒã (POH) ããããŸãã
-
DOTNET_GCHeapHardLimitSOHPercentãDOTNET_GCHeapHardLimitLOHPercentãDOTNET_GCHeapHardLimitPOHPercentèšå®ã®ããããã®å€ãæå®ããå ŽåãDOTNET_GCHeapHardLimitSOHPercentãšDOTNET_GCHeapHardLimitLOHPercentã®å€ãæå®ããå¿ èŠããããŸãã ããããªããšãã©ã³ã¿ã€ã ã§ã®åæåã倱æããŸãã -
DOTNET_GCHeapHardLimitSOHãDOTNET_GCHeapHardLimitLOHãããã³DOTNET_GCHeapHardLimitPOHãæå®ãããŠããå Žåããããã®èšå®ã¯ç¡èŠãããŸãã - å€ 1 ã¯ãGC ã«ãã£ãŠåèšç©çã¡ã¢ãªã® 1% ããã®ãªããžã§ã¯ã ããŒãã«äœ¿çšãããããšãæå³ããŸãã
- åå€ã¯ããŒããã倧ããã100 æªæºã§ããå¿ èŠããããŸãã ãŸãã3 ã€ã®ããŒã»ã³ããŒãžå€ã®åèšã¯ã100 æªæºã§ããå¿ èŠããããŸãã ãã以å€ã®å Žåãã©ã³ã¿ã€ã ã§ã®åæåã倱æããŸãã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.HeapHardLimitSOHPercent |
"10 é²å€" | .NET 5 |
| ç°å¢å€æ° | DOTNET_GCHeapHardLimitSOHPercent |
"16 é²å€" | .NET 6 |
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.HeapHardLimitLOHPercent |
"10 é²å€" | .NET 5 |
| ç°å¢å€æ° | DOTNET_GCHeapHardLimitLOHPercent |
"16 é²å€" | .NET 6 |
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.HeapHardLimitPOHPercent |
"10 é²å€" | .NET 5 |
| ç°å¢å€æ° | DOTNET_GCHeapHardLimitPOHPercent |
"16 é²å€" | .NET 6 |
ãããã®æ§æèšå®ã«ã¯ãç¹å®ã® MSBuild ããããã£ããããŸããã ãã ãã代ããã« RuntimeHostConfigurationOption MSBuild é
ç®ã远å ããããšãã§ããŸãã
屿§ã®å€ãšã㊠Include èšå®åã䜿çšããŸãã ããšãã°ããMSBuild ããããã£ããåç
§ããŠãã ããã
ãã³ã
runtimeconfig.json ã§ãªãã·ã§ã³ãèšå®ããå Žåã¯ã10 é²å€ãæå®ããŸãã ç°å¢å€æ°ãšããŠãªãã·ã§ã³ãèšå®ããå Žåã¯ã16 é²å€ãæå®ããŸãã ããšãã°ãããŒãã®äœ¿çšéã 30% ã«å¶éããå Žåãå€ã¯ JSON ãã¡ã€ã«ã§ã¯ 30ãç°å¢å€æ°ã§ã¯ 0x1E ãŸã㯠1E ã«ãªããŸãã
倧ããããŒãž
- ããŒãã®ããŒãå¶éãèšå®ãããŠããå Žåã«ã倧ããããŒãžã䜿çšããå¿ èŠããããã©ãããæå®ããŸãã
- æ¢å®å€: ããŒãã®ããŒãå¶éãèšå®ãããŠããå Žåã¯ã倧ããããŒãžã䜿çšããŸããã ããã¯ãå€ã
0ã«èšå®ããå Žåãšåãã§ãã - ããã¯è©Šé𿮵éã®èšå®ã§ãã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | ãªã | ãªã | ãªã |
| ç°å¢å€æ° | DOTNET_GCLargePages |
0 - ç¡å¹1 - æå¹ |
.NET 6 |
ãªãŒãžã§ã³ã®ç¯å²
.NET 7 以éãGC ããŒãã¯ã64 ããã Windows ããã³ Linux ã®ã»ã°ã¡ã³ããããªãŒãžã§ã³ã«ç©ç衚çŸãåãæ¿ããŸããã (詳现ã«ã€ããŠã¯ã Maoni Stephens ã®ããã°èšäºãåç §ããŠãã ãã)ããã®å€æŽã«ãããGC ã¯åæåäžã«ä»®æ³ã¡ã¢ãªã®ç¯å²ãäºçŽããŸãã ããã¯ã¡ã¢ãªã®ã¿ãäºçŽããã³ãããããªãããšã«æ³šæããŠãã ãã (GC ããŒã ãµã€ãºã¯ã³ããã ã¡ã¢ãªã§ã)ã GC ããŒããã³ãããã§ããæå€§ç¯å²ãå®çŸ©ããç¯å²ã«ãããŸããã ã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã®çšåºŠã®ã³ããããè¡ãå¿ èŠã¯ãããŸããã
ä»ã®æ§æããªããã¡ã¢ãªå¶çŽã®ããç°å¢ (äžéšã® GC æ§æãèšå®ãããåå ) ã§å®è¡ãããŠããªãå Žåãæ¢å®ã§ã¯ 256 GB ãäºçŽãããŸãã 䜿çšå¯èœãªç©çã¡ã¢ãªã 256 GB ãè¶ ããå Žåããã®éã® 2 åã«ãªããŸãã
ããŒãããšã®ããŒãå¶éãèšå®ãããŠããå ŽåãäºçŽç¯å²ã¯åèšããŒãå¶éãšåãã§ãã 1 ã€ã®ããŒãå¶éæ§æãèšå®ãããŠããå Žåããã®ç¯å²ã¯ãã® 5 åã«ãªããŸãã
ãã®ç¯å²ã¯ãä»®æ³ã¡ã¢ãªã®åèšéã«ãã£ãŠå¶éãããŸãã éåžžã64 ãããã§ã¯ããã¯åé¡ãããŸããããããã»ã¹ã«ä»®æ³ã¡ã¢ãªã®å¶éãèšå®ãããŠããå¯èœæ§ããããŸãã ãã®ç¯å²ã¯ããã®éã®ååã«å¶éãããŸãã ããšãã°ã HeapHardLimit æ§æã 1 GB ã«èšå®ããããã»ã¹ã« 4 GB ã®ä»®æ³ã¡ã¢ãªå¶éãèšå®ãããŠããå Žåããã®ç¯å²ã¯ min (5x1GB, 4GB/2) (2 GB) ã§ãã
GC.GetConfigurationVariables() API ã䜿çšããŠãGCRegionRangeãšããååã§ãã®ç¯å²ã®å€ã確èªã§ããŸãã å®è¡æã®åæåäžã«E_OUTOFMEMORYãçºçãããã®ç¯å²ãäºçŽããããšãåå ãã©ããã確èªããå Žåã¯ãWINDOWS äžã®VirtualAllocã䜿çšããMEM_RESERVEåŒã³åºãããŸã㯠linux äžã®mmapã§ã®PROT_NONEåŒã³åºãã調ã³ãOOM ããã®åŒã³åºããããã©ããã確èªããŸãã ãã®äºçŽåŒã³åºãã倱æããå Žåã¯ãæ¬¡ã®æ§æèšå®ã䜿çšããŠå€æŽã§ããŸãã äºçŽéã®æšå¥šäºé
ã¯ãGC ããŒãã®ã³ãããæžã¿ãµã€ãºã® 2 ~ 5 åã§ãã ã·ããªãªã§å€æ°ã®å€§ããªå²ãåœãŠãè¡ããªãå Žå (UOH ã§ã®å²ãåœãŠããŸã㯠UOH ãªãŒãžã§ã³ ãµã€ãºãã倧ããå¯èœæ§ããããŸã)ãã³ãããããããµã€ãºã® 2 åã¯å®å
šã§ããå¿
èŠããããŸãã ãã以å€ã®å Žåã¯ããã倧ããªãªãŒãžã§ã³ã®é åãäœãããã«ãããŸãé »ç¹ã«å®å
šå§çž® GC ãçºçããªãããã«ããµã€ãºã倧ããããããšããå§ãããŸãã GC ããŒãã®ã³ãããæžã¿ãµã€ãºãããããªãå Žåã¯ãããã»ã¹ã§äœ¿çšã§ããç©çã¡ã¢ãªã®éã® 2 åã«èšå®ã§ããŸãã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.RegionRange |
"10 é²å€" | .NET 10 |
| ç°å¢å€æ° | DOTNET_GCRegionRange |
"16 é²å€" | .NET 7 |
ãã®æ§æèšå®ã«ã¯ç¹å®ã® MSBuild ããããã£ããããŸããã ãã ãã代ããã« RuntimeHostConfigurationOption MSBuild é
ç®ã远å ããããšãã§ããŸãã
屿§ã®å€ãšã㊠Include èšå®åã䜿çšããŸãã ããšãã°ããMSBuild ããããã£ããåç
§ããŠãã ããã
ãªãŒãžã§ã³ ãµã€ãº
.NET 7 以éãGC ããŒãã¯ã64 ããã Windows ããã³ Linux ã®ã»ã°ã¡ã³ããããªãŒãžã§ã³ã«ç©ç衚çŸãåãæ¿ããŸããã (詳现ã«ã€ããŠã¯ã Maoni Stephens ã®ããã°èšäºãåç §ããŠãã ãã)ãæ¢å®ã§ã¯ãSOH ã®å ŽåãåãªãŒãžã§ã³ã¯ 4 MB ã§ãã UOH (LOH ãš POH) ã®å ŽåãSOH é åã®ãµã€ãºã® 8 åã§ãã ãã®æ§æã䜿çšã㊠SOH ãªãŒãžã§ã³ã®ãµã€ãºã倿Žãããšãããã«å¿ã㊠UOH ãªãŒãžã§ã³ã調æŽãããŸãã
ãªãŒãžã§ã³ã¯å¿ èŠãªå Žåã«ã®ã¿å²ãåœãŠããããããäžè¬ã«ãªãŒãžã§ã³ã®ãµã€ãºã«ã€ããŠå¿é ããå¿ èŠã¯ãããŸããã ãã ãããã®ãµã€ãºã調æŽããå Žå㯠2 ã€ãããŸãã
- GC ããŒããéåžžã«å°ããããã»ã¹ã®å Žåãé åãµã€ãºãå°ãã倿ŽãããšãGC ç¬èªã®ããã¯ããŒãã³ã°ããã®ãã€ãã£ã ã¡ã¢ãªäœ¿çšéã«åœ¹ç«ã¡ãŸãã æšå¥šã¯ 1 MB ã§ãã
- Linux ã§ã¯ãã¡ã¢ãª ãããã³ã°ã®æ°ãæžããå¿ èŠãããå Žåã¯ããªãŒãžã§ã³ ãµã€ãºã 32 MB ã®ããã«å€§ãã倿Žã§ããŸãã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.RegionSize |
"10 é²å€" | .NET 10 |
| ç°å¢å€æ° | DOTNET_GCRegionSize |
"16 é²å€" | .NET 7 |
ãã®æ§æèšå®ã«ã¯ç¹å®ã® MSBuild ããããã£ããããŸããã ãã ãã代ããã« RuntimeHostConfigurationOption MSBuild é
ç®ã远å ããããšãã§ããŸãã
屿§ã®å€ãšã㊠Include èšå®åã䜿çšããŸãã ããšãã°ããMSBuild ããããã£ããåç
§ããŠãã ããã
䜿çšçã®é«ãã¡ã¢ãªã®å²å
ã¡ã¢ãªã®è² è·ã¯ã䜿çšãããŠããç©çã¡ã¢ãªã®å²åã«ãã£ãŠç€ºãããŸãã æ¢å®ã§ã¯ãç©çã¡ã¢ãªã®è² è·ã 90%ã«éãããšãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãããç©æ¥µçã«å®å šã«å®è¡ãããã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ãå§çž®ãããŠããŒãžã³ã°ãåé¿ãããããã«ãªããŸãã ã¡ã¢ãªã®è² è·ã 90% æªæºã®å ŽåãGC ã«ãã£ãŠããã« ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ã«å¯Ÿããããã¯ã°ã©ãŠã³ã ã³ã¬ã¯ã·ã§ã³ãåªå ãããŸããäžæåæ¢ã¯çããªããŸãããããŒã ãµã€ãºã®åèšã¯ããã»ã©å°ãããªããŸããã 倧éã®ã¡ã¢ãª (80 GB 以äž) ãæèŒãããã³ã³ãã¥ãŒã¿ãŒã§ã¯ãè² è·ã®ãããå€ã¯ 90% ãã 97% ãæ¢å®å€ã§ãã
䜿çšçã®é«ãã¡ã¢ãªã®è² è·ã®ãããå€ã¯ãDOTNET_GCHighMemPercent ç°å¢å€æ°ããŸã㯠System.GC.HighMemoryPercent JSON æ§æèšå®ã«ãã£ãŠèª¿æŽã§ããŸãã ããŒã ãµã€ãºãå¶åŸ¡ããå Žåã¯ããããå€ã®èª¿æŽãæ€èšããŠãã ããã ããšãã°ã64 GB ã®ã¡ã¢ãªãæèŒããã³ã³ãã¥ãŒã¿ãŒäžã§æãåªå
床ã®é«ãããã»ã¹ã§ã¯ã䜿çšå¯èœãªã¡ã¢ãªã 10% ããã°ãGC ãåå¿ãéå§ããã®ã劥åœã§ãã ãã ãããµã€ãºã®å°ããããã»ã¹ãããšãã° 1 GB ã®ã¡ã¢ãªããæ¶è²»ããªãããã»ã¹ã§ã¯ã䜿çšå¯èœãªã¡ã¢ãªã 10% æªæºã§ããGC ãå¿«é©ã«å®è¡ã§ããŸãã ãã®ãããªå°ããããã»ã¹ã§ã¯ããããå€ãé«ãèšå®ããããšãæ€èšããŠãã ããã äžæ¹ã倧ããªããã»ã¹ã§ããŒã ãµã€ãºãå°ããããå Žåã¯ã䜿çšå¯èœãªç©çã¡ã¢ãªãååã«ãã£ããšããŠãããã®ãããå€ãäœããããšãGC ãããã«åå¿ããŠããŒããå§çž®ã§ãããããæ¹æ³ãšããŠã¯å¹ççã§ãã
ã¡ã¢
ã³ã³ãããŒã§å®è¡ãããŠããããã»ã¹ã®å ŽåãGC ã«ãã£ãŠãã³ã³ãããŒã®å¶éã«åºã¥ããŠç©çã¡ã¢ãªãèæ ®ãããŸãã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.HighMemoryPercent |
"10 é²å€" | .NET 5 |
| ç°å¢å€æ° | DOTNET_GCHighMemPercent |
"16 é²å€" | .NET 6 |
ãã®æ§æèšå®ã«ã¯ç¹å®ã® MSBuild ããããã£ããããŸããã ãã ãã代ããã« RuntimeHostConfigurationOption MSBuild é
ç®ã远å ããããšãã§ããŸãã
屿§ã®å€ãšã㊠Include èšå®åã䜿çšããŸãã ããšãã°ããMSBuild ããããã£ããåç
§ããŠãã ããã
ãã³ã
runtimeconfig.json ã§ãªãã·ã§ã³ãèšå®ããå Žåã¯ã10 é²å€ãæå®ããŸãã ç°å¢å€æ°ãšããŠãªãã·ã§ã³ãèšå®ããå Žåã¯ã16 é²å€ãæå®ããŸãã ããšãã°ã䜿çšçã®é«ãã¡ã¢ãªã®ãããå€ã 75% ã«èšå®ããããã®å€ã¯ãJSON ãã¡ã€ã«ã«å¯ŸããŠã¯ 75ãç°å¢å€æ°ã«å¯ŸããŠã¯ 0x4B ãŸã㯠4B ãšãªããŸãã
VM ã®ä¿æ
- åé€ããå¿ èŠãããã»ã°ã¡ã³ãããåŸã§äœ¿çšããããã«ã¹ã¿ã³ã〠ãªã¹ãã«é 眮ããããè§£æŸããŠãªãã¬ãŒãã£ã³ã° ã·ã¹ãã (OS) ã«æ»ãããæ§æããŸãã
- æ¢å®å€: ã»ã°ã¡ã³ããè§£æŸããŠãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã«æ»ããŸãã ããã¯ãå€ã
falseã«èšå®ããå Žåãšåãã§ãã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.RetainVM |
false -OS ã«è§£æŸããtrue - ã¹ã¿ã³ãã€ã«é
眮ãã |
.NET Core 1.0 |
| MSBuild ã®ãããã㣠| RetainVMGarbageCollection |
false -OS ã«è§£æŸããtrue - ã¹ã¿ã³ãã€ã«é
眮ãã |
.NET Core 1.0 |
| ç°å¢å€æ° | DOTNET_GCRetainVM |
0 -OS ã«è§£æŸãã1 - ã¹ã¿ã³ãã€ã«é
眮ãã |
.NET 6 |
䜿çšäŸ
runtimeconfig.json ãã¡ã€ã«:
{
"runtimeOptions": {
"configProperties": {
"System.GC.RetainVM": true
}
}
}
runtimeconfig.template.json ãã¡ã€ã«:
{
"configProperties": {
"System.GC.RetainVM": true
}
}
ãããžã§ã¯ã ãã¡ã€ã«:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<RetainVMGarbageCollection>true</RetainVMGarbageCollection>
</PropertyGroup>
</Project>
ã¡ã¢ãªãç¯çŽãã
- ã¡ã¢ãªãç¯çŽããããã®ã¬ããŒãž ã³ã¬ã¯ã¿ãŒã¯ãã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ã®é »åºŠãé«ããªããäžæåæ¢æéãé·ããªãå¯èœæ§ãšåŒãæãã«æ§æãããŸãã
- æ¢å®å€ã¯ 0 ã§ããããã¯å€æŽãªããæå³ããŸãã
- æ¢å®å€ 0 ã«å ãã1 ãã 9 (å æ¬) ã®å€ãæå¹ã§ãã å€ã倧ããã»ã©ãã¬ããŒãž ã³ã¬ã¯ã¿ãŒã¯ã¡ã¢ãªãç¯çŽããããšãããããããŒããå°ããä¿ãããŸãã
- å€ã 0 以å€ã®å Žåãæçåãå€ããããšã倧ããªãªããžã§ã¯ã ããŒããèªåçã«å§çž®ãããŸãã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.ConserveMemory |
0 - 9 |
.NET 6 |
| ç°å¢å€æ° | DOTNET_GCConserveMemory |
0 -9 |
.NET 6 |
| .NET Framework çšã® app.config | GCConserveMemory | 0 -9 |
.NET Framework 4.8 |
ãã®æ§æèšå®ã«ã¯ç¹å®ã® MSBuild ããããã£ããããŸããã ãã ãã代ããã« RuntimeHostConfigurationOption MSBuild é
ç®ã远å ããããšãã§ããŸãã
屿§ã®å€ãšã㊠Include èšå®åã䜿çšããŸãã ããšãã°ããMSBuild ããããã£ããåç
§ããŠãã ããã
app.config ãã¡ã€ã«ã®äŸ:
<configuration>
<runtime>
<GCConserveMemory enabled="5"/>
</runtime>
</configuration>
ãã³ã
ããŸããŸãªæ°å€ã詊ããŠãæé©ãªå€ã確èªããŠãã ããã 5 ãã 7 ã®å€ã§å§ããŸãããã
ãµãŒã㌠GC ã®ãªãœãŒã¹äœ¿çšéã管çãã
次ã®èšå®ã¯ããµãŒã㌠GC ã¹ã¬ããã®æ°ãšãããããã³ã¢ã«é¢é£ä»ãããããã©ãã/æ¹æ³ã«åœ±é¿ããŸãã ã¯ãŒã¯ã¹ããŒã·ã§ã³ GC ã«ã¯åœ±é¿ããŸããã
æåã® 3 ã€ã®èšå®ã®è©³çްã«ã€ããŠã¯ã ã¯ãŒã¯ã¹ããŒã·ã§ã³ãšãµãŒã㌠GC ã®éã®äžéã°ã©ãŠã³ã ã®ããã° ãšã³ããªãåç §ããŠãã ããã
ããŒãæ°
- ã¬ããŒãž ã³ã¬ã¯ã¿ãŒã«ãã£ãŠäœæãããããŒãã®æ°ãå¶éããŸãã
- ãµãŒã㌠ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ã«ã®ã¿é©çšãããŸãã
-
GC ããã»ããµã®é¢ä¿ãæå¹ã«ãªã£ãŠããå Žå (æ¢å®å€)ãããŒãæ°ã®èšå®ã§ã¯ãæåã®
nããã»ããµã«nGC ããŒããã¹ã¬ãããé¢é£ä»ããŸãã (é¢ä¿ä»ããã¹ã¯ãŸãã¯é¢ä¿ä»ãç¯å²ã®èšå®ã䜿çšããŠãé¢ä¿ä»ããããã»ããµãæ£ç¢ºã«æå®ããŸã)ã - GC ããã»ããµã®é¢ä¿ãç¡å¹ã«ãªã£ãŠããå Žåããã®èšå®ã«ãã£ãŠ GC ããŒãã®æ°ãå¶éãããŸãã
- 詳现ã«ã€ããŠã¯ãGCHeapCount ã®è§£èª¬ã«é¢ããèšè¿°ãåç §ããŠãã ããã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.HeapCount |
"10 é²å€" | .NET Core 3.0 |
| ç°å¢å€æ° | DOTNET_GCHeapCount |
"16 é²å€" | .NET 6 |
| .NET Framework çšã® app.config | GCHeapCount | "10 é²å€" | .NET Framework 4.6.2 |
ãã®æ§æèšå®ã«ã¯ç¹å®ã® MSBuild ããããã£ããããŸããã ãã ãã代ããã« RuntimeHostConfigurationOption MSBuild é
ç®ã远å ããããšãã§ããŸãã
屿§ã®å€ãšã㊠Include èšå®åã䜿çšããŸãã ããšãã°ããMSBuild ããããã£ããåç
§ããŠãã ããã
䜿çšäŸ
runtimeconfig.json ãã¡ã€ã«:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapCount": 16
}
}
}
runtimeconfig.template.json ãã¡ã€ã«:
{
"configProperties": {
"System.GC.HeapCount": 16
}
}
ãã³ã
runtimeconfig.json ã§ãªãã·ã§ã³ãèšå®ããå Žåã¯ã10 é²å€ãæå®ããŸãã ç°å¢å€æ°ãšããŠãªãã·ã§ã³ãèšå®ããå Žåã¯ã16 é²å€ãæå®ããŸãã ããšãã°ãããŒãã®æ°ã 16 ã«å¶éããå Žåãå€ã¯ JSON ãã¡ã€ã«ã§ã¯ 16ãç°å¢å€æ°ã§ã¯ 0x10 ãŸã㯠10 ã«ãªããŸãã
é¢ä¿ä»ã
- ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ ã¹ã¬ãããããã»ããµã« "é¢ä¿ä»ãã" ãã©ãããæå®ããŸãã GC ã¹ã¬ãããé¢ä¿ä»ããããšã¯ããã®ç¹å®ã® CPU ã§ã®ã¿å®è¡ã§ããããšãæå³ããŸãã å GC ã¹ã¬ããã«å¯ŸããŠããŒããäœæãããŸãã
- ãµãŒã㌠ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ã«ã®ã¿é©çšãããŸãã
- æ¢å®å€: ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ ã¹ã¬ãããããã»ããµã«é¢ä¿ä»ããŸãã ããã¯ãå€ã
falseã«èšå®ããå Žåãšåãã§ãã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.NoAffinitize |
false -é¢ä¿ä»ããtrue -é¢ä¿ä»ããªã |
.NET Core 3.0 |
| ç°å¢å€æ° | DOTNET_GCNoAffinitize |
0 -é¢ä¿ä»ãã1 -é¢ä¿ä»ããªã |
.NET 6 |
| .NET Framework çšã® app.config | GCNoAffinitize |
false -é¢ä¿ä»ããtrue -é¢ä¿ä»ããªã |
.NET Framework 4.6.2 |
ãã®æ§æèšå®ã«ã¯ç¹å®ã® MSBuild ããããã£ããããŸããã ãã ãã代ããã« RuntimeHostConfigurationOption MSBuild é
ç®ã远å ããããšãã§ããŸãã
屿§ã®å€ãšã㊠Include èšå®åã䜿çšããŸãã ããšãã°ããMSBuild ããããã£ããåç
§ããŠãã ããã
䜿çšäŸ
runtimeconfig.json ãã¡ã€ã«:
{
"runtimeOptions": {
"configProperties": {
"System.GC.NoAffinitize": true
}
}
}
runtimeconfig.template.json ãã¡ã€ã«:
{
"configProperties": {
"System.GC.NoAffinitize": true
}
}
é¢ä¿ä»ããã¹ã¯
- ã¬ããŒãž ã³ã¬ã¯ã¿ãŒ ã¹ã¬ããã§äœ¿çšããå¿ èŠãããæ£ç¢ºãªããã»ããµãæå®ããŸãã
- GC ããã»ããµã®é¢ä¿ãç¡å¹ã«ãªã£ãŠããå Žåããã®èšå®ã¯ç¡èŠãããŸãã
- ãµãŒã㌠ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ã«ã®ã¿é©çšãããŸãã
- ãã®å€ã¯ãããã»ã¹ã§äœ¿çšã§ããããã»ããµãå®çŸ©ããããã ãã¹ã¯ã§ãã ããšãã°ã10 é²å€ã® 1023 (ç°å¢å€æ°ã䜿çšããå Žåã¯ã16 é²å€ã® 0x3FF ãŸã㯠3FF) ã¯ããã€ããªè¡šèšã§ã¯ 0011 1111 1111 ãšãªããŸãã ããã«ãããæåã® 10 ããã»ããµã䜿çšãããããšãæå®ãããŸãã æ¬¡ã® 10 ããã»ããµ (ã€ãŸãã10 ãã 19 ããã»ããµ) ãæå®ããã«ã¯ã10 é²å€ã® 1047552 (ãŸã㯠16 é²å€ã® 0xFFC00 ãŸã㯠FFC00) ãæå®ããŸããããã¯ããã€ããªå€ã® 1111 1111 1100 0000 0000 ã«çžåœããŸãã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.HeapAffinitizeMask |
"10 é²å€" | .NET Core 3.0 |
| ç°å¢å€æ° | DOTNET_GCHeapAffinitizeMask |
"16 é²å€" | .NET 6 |
| .NET Framework çšã® app.config | GCHeapAffinitizeMask | "10 é²å€" | .NET Framework 4.6.2 |
ãã®æ§æèšå®ã«ã¯ç¹å®ã® MSBuild ããããã£ããããŸããã ãã ãã代ããã« RuntimeHostConfigurationOption MSBuild é
ç®ã远å ããããšãã§ããŸãã
屿§ã®å€ãšã㊠Include èšå®åã䜿çšããŸãã ããšãã°ããMSBuild ããããã£ããåç
§ããŠãã ããã
䜿çšäŸ
runtimeconfig.json ãã¡ã€ã«:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapAffinitizeMask": 1023
}
}
}
runtimeconfig.template.json ãã¡ã€ã«:
{
"configProperties": {
"System.GC.HeapAffinitizeMask": 1023
}
}
é¢ä¿ä»ãç¯å²
- ã¬ããŒãž ã³ã¬ã¯ã¿ãŒ ã¹ã¬ããã«äœ¿çšããããã»ããµã®ãªã¹ããæå®ããŸãã
- ãã®èšå®ã¯ System.GC.HeapAffinitizeMask ã«äŒŒãŠããŸããã64 ãè¶ ããããã»ããµãæå®ã§ããç¹ãç°ãªããŸãã
- Windows ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®å Žåãããã»ããµã®çªå·ãŸãã¯ç¯å²ã®åã«ã察å¿ãã CPU ã°ã«ãŒããä»ããŸããããšãã°ã"0:1-10,0:12,1:50-52,1:7" ãšãªããŸãã å®éã« ïŒãè¶ ãã CPU ã°ã«ãŒãããæã¡ã§ãªãå Žåã¯ããã®èšå®ã䜿çšã§ããŸããã Affinitize ãã¹ã¯ã®èšå®ã䜿çšããå¿ èŠããããŸãã æå®ããæ°å€ã¯ãã®ã°ã«ãŒãå ã«ãããŸããã€ãŸãã>= 64 ã«ããããšã¯ã§ããŸããã
- CPU ã°ã«ãŒãã®æŠå¿µãååšããªã Linux ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã§ã¯ããã®èšå®ãš Affinitize ãã¹ã¯èšå®ã®äž¡æ¹ã䜿çšããŠãåãç¯å²ãæå®ã§ããŸãã ãŸããã°ã«ãŒã ã€ã³ããã¯ã¹ãæå®ããå¿ èŠããªãããã"0:1-10" ã®ä»£ããã« "1- 10" ãæå®ããŸãã
- GC ããã»ããµã®é¢ä¿ãç¡å¹ã«ãªã£ãŠããå Žåããã®èšå®ã¯ç¡èŠãããŸãã
- ãµãŒã㌠ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ã«ã®ã¿é©çšãããŸãã
- 詳现ã«ã€ããŠã¯ãMaoni Stephens ã®ããã°ã®ã>ããåç §ããŠãã ããã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.HeapAffinitizeRanges |
ããã»ããµçªå·ãŸãã¯ããã»ããµçªå·ã®ç¯å²ã®ã³ã³ãåºåããªã¹ãã Unix ã®äŸ: "1-10,12,50-52,70" Windows ã®äŸ: "0:1-10,0:12,1:50-52,1:7" |
.NET Core 3.0 |
| ç°å¢å€æ° | DOTNET_GCHeapAffinitizeRanges |
ããã»ããµçªå·ãŸãã¯ããã»ããµçªå·ã®ç¯å²ã®ã³ã³ãåºåããªã¹ãã Unix ã®äŸ: "1-10,12,50-52,70" Windows ã®äŸ: "0:1-10,0:12,1:50-52,1:7" |
.NET 6 |
ãã®æ§æèšå®ã«ã¯ç¹å®ã® MSBuild ããããã£ããããŸããã ãã ãã代ããã« RuntimeHostConfigurationOption MSBuild é
ç®ã远å ããããšãã§ããŸãã
屿§ã®å€ãšã㊠Include èšå®åã䜿çšããŸãã ããšãã°ããMSBuild ããããã£ããåç
§ããŠãã ããã
䜿çšäŸ
runtimeconfig.json ãã¡ã€ã«:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapAffinitizeRanges": "0:1-10,0:12,1:50-52,1:7"
}
}
}
runtimeconfig.template.json ãã¡ã€ã«:
{
"configProperties": {
"System.GC.HeapAffinitizeRanges": "0:1-10,0:12,1:50-52,1:7"
}
}
CPU ã°ã«ãŒã
ã¬ããŒãž ã³ã¬ã¯ã¿ãŒã§ CPU ã°ã«ãŒãã䜿çšãããã©ãããæ§æããŸãã
64 ãããã® Windows ã³ã³ãã¥ãŒã¿ãŒã«è€æ°ã® CPU ã°ã«ãŒãããã (ã€ãŸãã64 ãè¶ ããããã»ããµããã) å Žåããã®èŠçŽ ãæå¹ã«ãããšããã¹ãŠã® CPU ã°ã«ãŒãå šäœã«ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ãæ¡åŒµãããŸãã ã¬ããŒãž ã³ã¬ã¯ã¿ãŒã§ã¯ãã¹ãŠã®ã³ã¢ã䜿çšããããŒããäœæããŠåæ£ãããŸãã
ã¡ã¢
ãã㯠Windows ã®ã¿ã«è©²åœããæŠå¿µã§ãã 以åã®ããŒãžã§ã³ã® Windows ã§ã¯ãWindows ã«ããããã»ã¹ã 1 ã€ã® CPU ã°ã«ãŒãã«å¶éãããŠããŸããã ãããã£ãŠããã®èšå®ã䜿çšããŠè€æ°ã® CPU ã°ã«ãŒããæå¹ã«ããªãéããGC ã§ã¯ 1 ã€ã® CPU ã°ã«ãŒãã®ã¿ã䜿çšãããŸããã ãã® OS ã®å¶éã¯ãWindows 11 ããã³ Server 2022 ã§è§£é€ãããŸããã ãŸãã.NET 7 以éã§ã¯ãWindows 11 ãŸã㯠Server 2022 ã§å®è¡ãããŠããå ŽåãGC ã¯æ¢å®ã§ãã¹ãŠã® CPU ã°ã«ãŒãã䜿çšããŸãã
64 ããã Windows ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®ã¿ã®ãµãŒã㌠ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ã«é©çšãããŸãã
æ¢å®å€: GC ã¯è€æ°ã® CPU ã°ã«ãŒãã«æ¡åŒµãããŸããã ããã¯ãå€ã
0ã«èšå®ããå Žåãšåãã§ãã詳现ã«ã€ããŠã¯ãMaoni Stephens ã®ããã°ã®ã>ããåç §ããŠãã ããã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.CpuGroup |
false - ç¡å¹true - æå¹ |
.NET 5 |
| ç°å¢å€æ° | DOTNET_GCCpuGroup |
0 - ç¡å¹1 - æå¹ |
.NET 6 |
| .NET Framework çšã® app.config | GCCpuGroup |
false - ç¡å¹true - æå¹ |
ãã®æ§æèšå®ã«ã¯ç¹å®ã® MSBuild ããããã£ããããŸããã ãã ãã代ããã« RuntimeHostConfigurationOption MSBuild é
ç®ã远å ããããšãã§ããŸãã
屿§ã®å€ãšã㊠Include èšå®åã䜿çšããŸãã ããšãã°ããMSBuild ããããã£ããåç
§ããŠãã ããã
ã¡ã¢
ãã¹ãŠã® CPU ã°ã«ãŒãå
šäœã«ã¹ã¬ãã ããŒã«ããã®ã¹ã¬ããã忣ããããã«å
±éèšèªã©ã³ã¿ã€ã (CLR) ãæ§æããã«ã¯ãThread_UseAllCpuGroups èŠçŽ ãªãã·ã§ã³ãæå¹ã«ããŸãã .NET Core ã¢ããªã®å Žåã¯ãDOTNET_Thread_UseAllCpuGroups ç°å¢å€æ°ã®å€ã 1 ã«èšå®ããããšã«ãã£ãŠããã®ãªãã·ã§ã³ãæå¹ã«ããããšãã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ãµã€ãºãžã®åçé©å¿ (DATAS)
DATAS ã®æå¹åãŸãã¯ç¡å¹å
- DATAS ã䜿çšããããã«ã¬ããŒãž ã³ã¬ã¯ã¿ãŒãæ§æããŸãã DATAS ã¯ã¢ããªã±ãŒã·ã§ã³ ã®ã¡ã¢ãªèŠä»¶ã«é©å¿ããŸããã€ãŸããã¢ã㪠ããŒã ãµã€ãºã¯ãæå¹æéã®é·ãããŒã¿ ãµã€ãºã«ã»ãŒæ¯äŸããå¿ èŠããããŸãã
- .NET 9 以éã§ã¯ãæ¢å®ã§æå¹ã«ãªã£ãŠããŸãã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| ç°å¢å€æ° | DOTNET_GCDynamicAdaptationMode |
1 - æå¹0 - ç¡å¹ |
.NET 8 |
| MSBuild ã®ãããã㣠| GarbageCollectionAdaptationMode |
1 - æå¹0 - ç¡å¹ |
.NET 8 |
| runtimeconfig.json | System.GC.DynamicAdaptationMode |
1 - æå¹0 - ç¡å¹ |
.NET 8 |
ã¿ãŒã²ãã TCP
DATAS ã§ã¯ãã¹ã«ãŒãããã®ã¡ã¢ãª ã³ã¹ã枬å®ãšããŠã¹ã«ãŒããã ã³ã¹ãã®å²å (TCP) ã䜿çšãããŸãã GC ã®äžæåæ¢ãšãåŸ æ©ããå¿ èŠãããå²ãåœãŠã®éã®äž¡æ¹ãèæ ®ãããŸãã éåžžãGC ã®äžæåæ¢ãåªå¢ã§ããããã"gc ã®% äžæåæ¢æé" ã䜿çšããŠããã®ã³ã¹ããæŠç®ã§ããŸãã å²ãåœãŠåŸ æ©æéã倧ããªåœ±é¿ãåããå¯èœæ§ãããäžæçãªã±ãŒã¹ã¯ 2 ã€ãããŸãã
- ããã»ã¹ãéå§ããããšãDATAS ã¯åžžã« 1 ã€ã®ããŒãã§å§ãŸããŸãã ãã®ãããååãªã¹ã¬ãããå²ãåœãŠãããŠããå Žåã¯ãåŸ æ©ãçºçããŸãã
- ã¯ãŒã¯ããŒãã軜ããã®ããéããã®ã«å€ããå Žå (ããŒã¯æã®éå§æãªã©)ãã¹ã¬ãããå²ãåœãŠããšããã®æéäžã«åŸ æ©ãçºçããå¯èœæ§ããããŸãã ããã¯ãããŒãã®æ°ãå¢ããåã«ãããã€ãã® VC ãèŠããããã§ãã
DATAS ã§ã¯ãæ¢å®ã® TCP ãšã㊠2% ã䜿çšãããŸãããã®èšå®ã§èª¿æŽã§ããŸãã ããã¯ããŒã»ã³ããŒãžãšããŠè§£éãããæŽæ°ã§ããããšãã°ã5 ã¯ã¿ãŒã²ãã TCP ã 5%ãããããšãæå³ããŸãã
| èšå®ã®åå | å€ | å°å ¥ãããããŒãžã§ã³ | |
|---|---|---|---|
| runtimeconfig.json | System.GC.DTargetTCP |
"10 é²å€" | .NET 9 |
| ç°å¢å€æ° | DOTNET_GCDTargetTCP |
"16 é²å€" | .NET 9 |
ãã®æ§æèšå®ã«ã¯ç¹å®ã® MSBuild ããããã£ããããŸããã ãã ãã代ããã« RuntimeHostConfigurationOption MSBuild é
ç®ã远å ããããšãã§ããŸãã
屿§ã®å€ãšã㊠Include èšå®åã䜿çšããŸãã ããšãã°ããMSBuild ããããã£ããåç
§ããŠãã ããã
Gen0 ã®æå€§äºç®èšå®
gen0 äºç®ã®èª¿æŽã¯ãDATAS ãã¢ããªã±ãŒã·ã§ã³ ãµã€ãºã«é©å¿ããããã«äœ¿çšããéèŠãªèŠçŽ ã® 1 ã€ã§ãã DATAS ã¯ãã¢ããªã±ãŒã·ã§ã³ ãµã€ãºã®é¢æ°ãšã㊠gen0 äºç®ã®åèšã«å¯Ÿã㊠BCD (DATAS ã䜿çšããŠèšç®ãããäºç®) ãšåŒã°ããäžéãããå€ãå®çŸ©ããŸãã 乿°ãèšç®ããæ°åŒã¯æ¬¡ã®ãšããã§ãã
$$ f(\text{application_size_in_MB}) = \frac{20 - \text{conserve_memory}}{\sqrt{\text{application_size_in_MB}}} $$
ãã®åŸãæ°åŒã¯ãã¢ããªã±ãŒã·ã§ã³ ãµã€ãº (MB) ã«é©çšãããåã«ãæå€§å€ãšæå°å€ã§åºå®ãããŸãã ã¡ã¢ãªç¯çŽèšå®ãæå®ãããŠããªãå ŽåãDATAS ã§ã¯æ¢å®ã§ 5 ã䜿çšãããŸãã æå€§å€ãšæå°å€ã®æ¢å®å€ã¯ãããã 10 ãš 0.1 ã§ãã
ããšãã°ãã¢ããªã±ãŒã·ã§ã³ ãµã€ãºã 1 GB ã®å Žåãæ°åŒã¯ (20 - 5) / sqrt (1000) = 0.474ãèšç®ããŸãã 10 ãã 0.1 ã®éãªã®ã§ãã¯ã©ã³ãã¯å¹æããããŸããã ã€ãŸããgen0 ã®åèšäºç®ã¯ 47.4% 1 GB (474 MB) ã§ãã ã¢ããªã±ãŒã·ã§ã³ ãµã€ãºã 1 MB ã®å Žåãæ°åŒã§ã¯ 15 ãèšç®ããã10 ã«èª¿æŽãããŸããã€ãŸããèš±å¯ããã gen0 äºç®ã®åèšã¯ 10 MB ã§ãã
æ°åŒã®èšç®å 容ã調æŽããã¯ã©ã³ãå€ã倿Žããããã® 3 ã€ã®èšå®ãçšæãããŠããŸãã
fèšç®ã«é©çšãããå²åãèšå®ã®åå å€ å°å ¥ãããããŒãžã§ã³ runtimeconfig.json System.GC.DGen0GrowthPercent"10 é²å€" .NET 10 ç°å¢å€æ° DOTNET_GCDGen0GrowthPercent"16 é²å€" .NET 10 ãã®æ§æèšå®ã«ã¯ç¹å®ã® MSBuild ããããã£ããããŸããã ãã ãã代ããã«
RuntimeHostConfigurationOptionMSBuild é ç®ã远å ããããšãã§ããŸãã 屿§ã®å€ãšããŠIncludeèšå®åã䜿çšããŸãã ããšãã°ããMSBuild ããããã£ããåç §ããŠãã ããããããã£ãŠã
fã 0.474 ãèšç®ãããã®èšå®ã 200 ã®å Žåãã¯ã©ã³ããé©çšãããåã«ä¹æ°ã0.474 * 200% = 0.948ã«ãªããŸããpermil ã®æå€§ã¯ã©ã³ãå€ã
èšå®ã®åå å€ å°å ¥ãããããŒãžã§ã³ runtimeconfig.json System.GC.DGen0GrowthMaxFactor"10 é²å€" .NET 10 ç°å¢å€æ° DOTNET_GCDGen0GrowthMaxFactor"16 é²å€" .NET 10 ãã®æ§æèšå®ã«ã¯ç¹å®ã® MSBuild ããããã£ããããŸããã ãã ãã代ããã«
RuntimeHostConfigurationOptionMSBuild é ç®ã远å ããããšãã§ããŸãã 屿§ã®å€ãšããŠIncludeèšå®åã䜿çšããŸãã ããšãã°ããMSBuild ããããã£ããåç §ããŠãã ããããã®å€ã 20000 ã®å Žåã¯ãæå€§ã¯ã©ã³ãå€ã
20000 * 0.001 = 20ã§ããããšãæå³ããŸããããŒãã«åäœã®æå°ã¯ã©ã³ãå€ã
èšå®ã®åå å€ å°å ¥ãããããŒãžã§ã³ runtimeconfig.json System.GC.DGen0GrowthMinFactor"10 é²å€" .NET 10 ç°å¢å€æ° DOTNET_GCDGen0GrowthMinFactor"16 é²å€" .NET 10 ãã®æ§æèšå®ã«ã¯ç¹å®ã® MSBuild ããããã£ããããŸããã ãã ãã代ããã«
RuntimeHostConfigurationOptionMSBuild é ç®ã远å ããããšãã§ããŸãã 屿§ã®å€ãšããŠIncludeèšå®åã䜿çšããŸãã ããšãã°ããMSBuild ããããã£ããåç §ããŠãã ããããã®å€ã 200 ã®å Žåãæå°ã¯ã©ã³ãå€ã¯
200 * 0.001 = 0.2ã