Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Unter Windows berücksichtigt die Environment.ProcessorCount Eigenschaft nun die Prozessaffinität und das harte Limit des Auftragsobjekts bei der CPU-Auslastung.
Änderungsbeschreibung
In früheren .NET-Versionen gibt die Environment.ProcessorCount Eigenschaft unter Windows die Anzahl der logischen Prozessoren auf dem Computer zurück. Die Eigenschaft ignoriert die Prozessaffinität und das harte Limit des Auftragsobjekts bei der CPU-Auslastung. Dieses Windows-Verhalten ist mit dem Verhalten auf Unix-basierten Betriebssystemen inkonsistent, wenn diese Grenzwerte eingehalten werden.
Ab .NET 6 ist das Verhalten von Environment.ProcessorCount unter Windows konsistent mit dem Verhalten auf einem Unix-basierten Betriebssystem. Gibt im Allgemeinen Environment.ProcessorCount folgendes Minimum zurück:
- Die Anzahl der logischen Prozessoren auf dem Computer.
- Wenn der Prozess mit CPU-Affinität ausgeführt wird, ist die Anzahl der Prozessoren angegeben, an die der Prozess gebunden ist.
- Wenn der Prozess mit einem CPU-Auslastungslimit ausgeführt wird, wird die CPU-Auslastungsgrenze auf die nächste ganze Zahl aufgerundet.
Die folgende Tabelle zeigt, wie sich der Wert von Environment.ProcessorCount .NET 5 auf .NET 6 auf einem Computer mit acht logischen Prozessoren ändert:
| Umwelt | .NET 5 | .NET 6 |
|---|---|---|
| Vorgang ist zwei logischen Prozessoren zugeordnet (Windows) | 8 | 2 |
| Vorgang ist zwei logischen Prozessoren zugeordnet (Unix) | 2 | 2 |
| CPU-Auslastung beschränkt auf das Äquivalent von zwei logischen Prozessoren (Windows) | 8 | 2 |
| CPU-Auslastung beschränkt auf das Äquivalent von zwei logischen Prozessoren (Unix) | 2 | 2 |
Eingeführte Version
6,0
Grund für Änderung
Diese Eigenschaft wird häufig verwendet, um den Parallelitätsfaktor für einen Prozess zu bestimmen. Wir haben festgestellt, dass das Nicht einschränken des Werts der Eigenschaft auf der Grundlage der Affinität und des CPU-Auslastungslimits zu einer schlechteren Leistung führen kann.
Empfohlene Aktion
Überprüfen Sie Code, der Environment.ProcessorCount verwendet, um den Parallelisierungsgrad basierend auf der Anwendungs- oder Systemkonfiguration zu reduzieren. Auch wenn der Code die Affinitätsmaske des Prozesses oder den CPU-Auslastungsgrenzwert des Auftragsobjekts berücksichtigt, kann er möglicherweise einen niedrigeren Parallelismus als beabsichtigt verwenden.
Überprüfen Sie Code, der erwartet, dass `Environment.ProcessorCount` die Gesamtzahl der logischen Prozessoren auf dem Computer zurückgibt, z. B. um sie einem Benutzer anzuzeigen. Stattdessen können Sie einen PInvoke-Aufruf für die Win32-APIs GetSystemInfo oder GetNativeSystemInfo verwenden.
Wenn der Code durch diese Änderung schlechter ausgeführt wird, können Sie die DOTNET_PROCESSOR_COUNT Umgebungsvariable verwenden, um die Anzahl der Prozessoren zu überschreiben, die von der .NET-Runtime zur Verfügung stehen und von der Environment.ProcessorCount Eigenschaft gemeldet werden. Wenn Sie DOTNET_PROCESSOR_COUNT auf 4 setzen, ignoriert Environment.ProcessorCount alle Prozessaffinitäts- und CPU-Auslastungsbeschränkungen und gibt 4 zurück. Um .NET 5-Verhalten nachzuahmen, legen Sie die Umgebungsvariable auf %NUMBER_OF_PROCESSORS%.