Sdílet prostřednictvím


Chování Environment.ProcessorCount ve Windows

Ve Windows Environment.ProcessorCount teď vlastnost respektuje spřažení procesu a pevný limit objektu úlohy při využití procesoru.

Změna popisu

V předchozích verzích Environment.ProcessorCount .NET vrátí vlastnost ve Windows počet logických procesorů na počítači. Vlastnost ignoruje spřažení procesu a pevný limit objektu úlohy na využití procesoru. Toto chování systému Windows je nekonzistentní s chováním v operačních systémech Unix, kde jsou tyto limity dodrženy.

Počínaje rozhraním .NET 6 je chování systému Windows konzistentní s chováním operačního Environment.ProcessorCount systému unixového systému. Obecně platí, Environment.ProcessorCount že vrátí minimum:

  • Počet logických procesorů na počítači.
  • Pokud proces běží se spřažením procesoru, počet procesorů, ke kterým je proces spřažení.
  • Pokud proces běží s limitem využití procesoru, zaokrouhluje se limit využití procesoru nahoru na další celé číslo.

Následující tabulka ukazuje, jak se hodnota Environment.ProcessorCount změn z .NET 5 na .NET 6 na počítači s osmi logickými procesory:

Prostředí .NET 5 .NET 6
Spřažení procesů se dvěma logickými procesory (Windows) 8 2
Spřažení procesů se dvěma logickými procesory (Unix) 2 2
Využití procesoru omezené na ekvivalent dvou logických procesorů (Windows) 8 2
Využití procesoru omezené na ekvivalent dvou logických procesorů (Unix) 2 2

Zavedená verze

6.0

Důvod změny

Tato vlastnost se často používá k určení faktoru paralelismu procesu. Zjistili jsme, že omezení hodnoty vlastnosti na základě spřažení a limitu využití procesoru může vést k horšímu výkonu.

Zkontrolujte kód, který používá Environment.ProcessorCount ke snížení kapacity faktoru paralelismu na základě konfigurace aplikace nebo systému. I když kód vezme masku spřažení procesu nebo limit využití procesoru objektu úlohy, může nakonec použít nižší paralelismus, než je zamýšleno.

Zkontrolujte kód, který očekává Environment.ProcessorCount , že vrátí celkový počet logických procesorů na počítači, například aby ho zobrazil uživateli. Místo toho můžete použít volání PInvoke rozhraní GetSystemInfo API nebo GetNativeSystemInfo Win32.

Pokud kód v důsledku této změny provádí horší výkon, můžete pomocí DOTNET_PROCESSOR_COUNT proměnné prostředí přepsat počet procesorů, o které modul runtime .NET považuje za dostupný a ohlásila vlastnost Environment.ProcessorCount . Pokud například nastavíte DOTNET_PROCESSOR_COUNT hodnotu 4, Environment.ProcessorCount ignoruje všechny spřažení procesů a omezení využití procesoru a vrátí hodnotu 4. Pokud chcete napodobovat chování rozhraní .NET 5, nastavte proměnnou prostředí na %NUMBER_OF_PROCESSORS%hodnotu .

Ovlivněná rozhraní API