忘れない内にメモメモ。
サーバーなどで複数のCPUグループを持つコンピュータがあった場合、CLRはデフォルトで最初のCPUグループしか使ってくれません。
なので、例えばCPUグループが2つあり、それぞれ20コアずつ存在する場合、普通にタスクで処理すると40コアあるのに20コアしか使ってくれません。
それを全CPUグループ有効にするには、App.Configに以下の設定を加える必要があります。
<runtime> <Thread_UseAllCpuGroups enabled="true"></Thread_UseAllCpuGroups> <GCCpuGroup enabled="true"></GCCpuGroup> <gcServer enabled="true"></gcServer> </runtime>
上記設定を入れると、全CPUグループに対してマネージスレッドが分散されます。ハマりました・・・・。
注意点として、上の設定は3つでセットです。Thread_UseAllCpuGroupsをTrueにする場合、GCCpuGroupもgcServerも共にTrueにする必要があります。
以下、参考にしたリソースです。
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。