Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ve Windows nyní vlastnost Environment.ProcessorCount respektuje přiřazení procesu a pevný limit využití procesoru, jak je určen objektu úlohy.
Změnit popis
Ve starších verzích .NET vlastnost Environment.ProcessorCount ve Windows vracela 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í Environment.ProcessorCount na Windows konzistentní s chováním na operačních systémech založených na Unixu. Obecně Environment.ProcessorCount vrátí minimum z:
- Počet logických procesorů na počítači.
- Pokud proces běží s nastavením vazby na procesor, počet procesorů, ke kterým je proces vázán.
- 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 mění od .NET 5 na .NET 6 na počítači s osmi logickými procesory.
Životní prostředí | .NET 5 | .NET 6 |
---|---|---|
Proces spřažený se dvěma logickými procesory (Windows) | 8 | 2 |
Proces přiřazený ke dvěma logickým procesorům (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 |
Verze byla představena
6.0
Důvod změny
Tato vlastnost se často používá k určení faktoru paralelismu procesu. Zjistili jsme, že neomezení 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 v úvahu nastavení afinity procesu nebo vypočítá limit využití CPU objektu úlohy, může nakonec použít nižší paralelismus, než bylo 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 k rozhraní Win32 API GetSystemInfo
nebo GetNativeSystemInfo
.
Pokud kód v důsledku této změny má horší výkon, můžete pomocí proměnné prostředí DOTNET_PROCESSOR_COUNT
přepsat počet procesorů, které modul runtime .NET považuje za dostupné a které hlásí 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 .