<GCHeapCount> 要素

サーバー ガベージ コレクションに使用するヒープまたはスレッドの数を指定します。

<構成>
  <runtime>
    <GCHeapCount>

構文

<GCHeapCount
   enabled="nn"/>

属性と要素

以降のセクションでは、属性、子要素、および親要素について説明します。

属性

属性 説明
enabled 必須の属性です。

サーバー ガベージ コレクションに使用するヒープの数を指定します。 実際のヒープ数は、指定するヒープの数とプロセスで使用できるプロセッサの数の最小値です。

enabled 属性

[値] 説明
nn サーバー GC に使用するヒープの数。

子要素

なし。

親要素

要素 説明
configuration 共通言語ランタイムおよび .NET Framework アプリケーションで使用されるすべての構成ファイルのルート要素です。
runtime アセンブリのバインディングとガベージ コレクションに関する情報が含まれています。

解説

既定では、サーバー GC スレッドとそれぞれの CPU にはハード アフィニティがあります。そのため、各プロセッサにつき 1 つの GC ヒープ、1 つのサーバー GC スレッド、1 つのバックグラウンド サーバー GC スレッドが存在します。 .NET Framework 4.6.2 以降では、GCHeapCount 要素を使用して、アプリケーションでサーバー GC に使用されるヒープの数を制限することができます。 サーバー GC に使用されるヒープの数を制限することは、サーバー アプリケーションの複数のインスタンスを実行するシステムに特に役立ちます。

GCHeapCount は、通常、次の 2 つのフラグと共に使用されます。

  • GCNoAffinitize では、サーバー GC スレッドまたはヒープが CPU と関連付けられているかどうかを制御します。

  • GCHeapAffinitizeMask では、GC スレッドまたはヒープと CPU とのアフィニティを制御します。

GCHeapCount が設定されていて、GCNoAffinitize が無効になっている場合 (既定の設定)、nn の GC スレッドまたはヒープと最初の nn のプロセッサの間にアフィニティがあります。 GCHeapAffinitizeMask 要素を使用すると、プロセスのサーバー GC ヒープで使用されるプロセッサを指定できます。 それ以外の場合、システムで複数のサーバー プロセスが実行されていると、プロセッサの使用率が重複します。

GCHeapCount が設定され、GCNoAffinitize が有効になっている場合、ガベージ コレクターではサーバー GC に使用されるプロセッサの数が制限されますが、GC ヒープとプロセッサは関連付けられません。

次の例では、アプリケーションで 10 個のヒープまたはスレッドを持つサーバー GC を使用することを示しています。 これらのヒープが、システムで実行されている他のアプリケーションのヒープと重複しないようにするため、GCHeapAffinitizeMask を使用して、プロセスで CPU 0 ~ 9 を使用するように指定します。

<configuration>
   <runtime>
      <gcServer enabled="true"/>
      <GCHeapCount enabled="10"/>
      <GCHeapAffinitizeMask enabled="1023"/>
   </runtime>
</configuration>

次の例では、サーバー GC スレッドにアフィニティを設定せず、GC ヒープ/スレッドの数を 10 に制限します。

<configuration>
   <runtime>
      <gcServer enabled="true"/>
      <GCHeapCount enabled="10"/>
      <GCNoAffinitize enabled="true"/>
   </runtime>
</configuration>

関連項目