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.
Doporučená akce
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 .