2015-01-15 13 views
5

Makinemde, Windows 7 - 1 x Intel Xeon E5-1660 0 @ 3.30Ghz (Hyper Threading özellikli 6 çekirdek/işlemci) ile Enterprise, tam bir Environment.ProcessorCount dönüşü 12.C# Environment.ProcessorCount her zaman Mantıksal İşlemcinin tam sayısını döndürmez, neden?

Windows Server 2012'de, 2 x Intel Xeon E5-2697 v3 @ 2.60GHz (Hyper Threading etkinleştirilmiş 14 çekirdek/işlemci (bence görev yöneticisi gösterisi: 2 yuva, 28 çekirdek, 56 mantıksal işlemci)), Bize yanlış olarak görünen Environment.ProcessorCount return 28 2x14x2 = 56.

Neden Windows Server 2012 C# yöntemi üzerinde Environment.ProcessorCount uygun sayıda mantıksal işlemci döndürmüyor? aşağıdaki gibi

olarak bilgiye, çevre değişkenleri şunlardır: number_of_processors = 28

TaskManager

Güncelleme 2015/05/26:

bu ilgili daha ayrıntılı/nedenleri vardır Benim diğer soruda hata: Unable to use more than one processor group for my threads in a C# app. Esasen C# 'nin sadece bir işlemci grubu kullandığını düşünüyorum. Werid sunucumuzda, sadece 56 mantıksal işlemci olmasına rağmen 2 işlemci grubu vardı. Ancak, bu HP CUSTOMER ADVISORY, sunucu biyo yapılandırmamızın neden yanlışlıkla pencereleri tetiklediğini açıklıyor. Mevcut makine çok işlemcili gruplar içeriyorsa

", bu tesis, ortak dil çalıştırma süresi (CLR) tarafından kullanılmak üzere mevcut olan mantıksal bir işlemci sayısını verir:

+0

Environment.PermissionAccess' I :-) size bir CPU bilgisini veriyor 'ben şaşırdım belgelenmiş olarak bile bulamıyorum. –

+0

Üzgünüm, soru başlığımı düzenledim ... Yanlış yöntem adını kullandım. Üzgünüm. Bilgi için teşekkürler. –

cevap

4

dokümanlar bir ipucu olabilir ."

Buradaki sorun bu olabilir mi? Başka ilginç

MSDN Article

Bulunan şey: Varsayılan olarak

, havuz tek işlemci grubuna (http://msdn.microsoft.com/en-us/library/windows/desktop/dd405503(v=vs.85).aspx) ile sınırlı ve bu nedenle 64 çekirdek edilir. Ancak, .NET 4.5'te Thread_UseAllCpuGroups etkin = "true" bayrağını ayarlayabilirsiniz.

MSDN Forum Post

+0

Evet, bu olabilir ... ama bende aradığım şey bu. Mevcut sayının neden tam tutardan az olduğu konusunda bir açıklama? ... Bir lisans sorunu, bir pencere ayarı, pencereler normal davranış ??? –

+0

CLR'nin varsayılan olarak olmadığını mı yoksa ikinci bir fiziksel CPU'yu yakalayamayacağını mı merak ediyorum? Bu alanda uzman değilim, ama gerçekten merak ediyorum. – user2366842

+0

@ user2366842, Katılıyorum, durumun acaba öyle olduğunu merak ettim (bunun olabileceğini düşündüm), hiçbir fikrim yok, neden olmadan başarı aradım nedeni? –

0

sistem number_of_processors ortam değişkeni kontrol edin. Bu yöntem geri dönüyor. MSDN makalesine bakın: http://msdn.microsoft.com/en-us/library/system.environment.processorcount%28v=vs.100%29.aspx (izin bölümü).

+0

Biliyorum ama neden sadece yarısına sahip olduğumun nedenini cevaplamıyor. Neden sadece yarısını aldığımı söyleyen bir belge istiyorum. Eğer gerçekten ise, eğer Environment.ProcessorCount ikinci CPU'yu hesaba katmazsa, bunu kullanacağım. Ancak bir Windows Server ayarı nedeniyle sadece bunun yarısını görürsem, işlemci sayısıyla çarpmak mantıklı olmaz. –

+0

Bilgileriniz için bağlantınız çerçevenin 4. versiyonuna aittir. 4.5 sürümünde, ortam değişkeni hakkındaki bilgiler kaldırıldı ve tek bir sebepten dolayı: bu doğru değil. Ortam değişkeni değiştirdim ve uygulamamı çalıştırdım ve hala mantıksal işlemcilerin yalnızca yarısını görüyorum (hepsi aynı ortamda - aynı cmd isteminde). Ama denediğiniz için teşekkürler. –

2

the MSDN docs on <Thread_UseAllCpuGroups> göre tüm CPU grupları görülen ve kullanılmış olması için aşağıdaki kurmak gerekir:

<configuration> 
    <runtime> 
     <Thread_UseAllCpuGroups enabled="true"/> 
     <GCCpuGroup enabled="true"/> 
     <gcServer enabled="true"/> 
    </runtime> 
</configuration> 
+2

Teşekkürler, haklısınız. Ama ben zaten yaptım. Bu sorunla ilgili olarak HP'den bir sürü geri bildirim aldığımdan (başka bir StackOverflow sorusuna eklenmiş), soruma bir güncelleme ekledim. –

İlgili konular