Aracılığıyla paylaş


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.

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