Windows'ta Environment.ProcessorCount davranışı
Windows'da Environment.ProcessorCount özelliği artık işlem benzitesine ve iş nesnesinin CPU kullanımı üzerindeki sabit sınırına saygı gösterir.
Açıklama değiştirildi
Önceki .NET sürümlerinde, Environment.ProcessorCount Windows'taki özelliği makinedeki mantıksal işlemci sayısını döndürür. özelliği, işlem benzenşimini ve iş nesnesinin CPU kullanımı üzerindeki sabit sınırını yoksayar. Bu Windows davranışı, bu sınırların dikkate alındığı Unix tabanlı işletim sistemlerindeki davranışla tutarsızdır.
.NET 6'dan başlayarak, Windows'un davranışı Environment.ProcessorCount Unix tabanlı işletim sistemindeki davranışla tutarlıdır. Genel olarak, Environment.ProcessorCount aşağıdakilerin en küçük değerini döndürür:
- Makinedeki mantıksal işlemci sayısı.
- İşlem CPU benzenşimi ile çalışıyorsa, işlemin benzenlendiği işlemci sayısı.
- İşlem bir CPU kullanım sınırıyla çalışıyorsa, CPU kullanım sınırı bir sonraki tamsayıya yuvarlandı.
Aşağıdaki tabloda, sekiz mantıksal işlemciye Environment.ProcessorCount sahip bir makinede .NET 5'ten .NET 6'ya yapılan değişikliklerin değeri gösterilmektedir:
Ortam | .NET 5 | .NET 6 |
---|---|---|
İki mantıksal işlemciye (Windows) yönelik olarak onaylanmış işlem | 8 | 2 |
İki mantıksal işlemciye (Unix) göre onaylanmış işlem | 2 | 2 |
İki mantıksal işlemcinin eşdeğeri ile sınırlı CPU kullanımı (Windows) | 8 | 2 |
İki mantıksal işlemcinin eşdeğeri ile sınırlı CPU kullanımı (Unix) | 2 | 2 |
Sürüm kullanıma sunulmuştur
6,0
Değişiklik nedeni
Bu özellik genellikle bir işlemin paralellik faktörünü belirlemek için kullanılır. Özelliğin değerinin benzenleme ve CPU kullanım sınırına göre sınırlandırılmaması daha kötü performansa yol açabileceğini gözlemledik.
Önerilen eylem
Uygulama veya sistem yapılandırmasına göre paralellik faktörünün ölçeğini küçültmek için kullanan Environment.ProcessorCount kodu gözden geçirin. Kod, işlemin benzenşim maskesini veya iş nesnesinin CPU kullanım sınırını hesaba katsa bile, amaçlanandan daha düşük paralellik kullanıyor olabilir.
Makinedeki toplam mantıksal işlemci sayısını (örneğin, bir kullanıcıya görüntülemek için) döndürmeyi bekleyen Environment.ProcessorCount kodu gözden geçirin. Bunun yerine, veya GetNativeSystemInfo
Win32 API'lerine bir GetSystemInfo
PInvoke çağrısı kullanabilirsiniz.
Bu değişiklik sonucunda kod daha kötü bir performans sergilerse, .NET çalışma zamanı tarafından kullanılabilir olduğu düşünülen ve özelliği tarafından bildirilen işlemci sayısını geçersiz kılmak için ortam değişkenini Environment.ProcessorCount kullanabilirsinizDOTNET_PROCESSOR_COUNT
. Örneğin, 4 olarak ayarlarsanız DOTNET_PROCESSOR_COUNT
işlem Environment.ProcessorCount benzenşimi ve CPU kullanım sınırı göz ardı edilecek ve 4 döndürülecektir. .NET 5 davranışını taklit etmek için ortam değişkenini olarak %NUMBER_OF_PROCESSORS%
ayarlayın.
Etkilenen API’ler
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin