Come posso determinare programmaticamente se su multi-core, hyperthreading o multi-processore?
-
08-07-2019 - |
Domanda
So come ottenere il tipo di processore, forse è l'unico modo, ma in realtà sto cercando un modo per determinare da un'applicazione se è in esecuzione su un processore multi-core o su un processore single-core hyper-threading .
(background: i provider di hosting di alcuni dei miei clienti sono molto vaghi sulle risorse che rendono disponibili tramite le immagini VMWare. Questa applicazione dovrebbe essere eseguita su multi-core, ma ha visto prestazioni dannose dall'ultima "mossa" Normalmente, su multi-core, un core picchi su un thread e non sull'altro. Su questo "multi-core", entrambi i processori spuntano, anche su applicazioni single-thread.)
Soluzione
System.Environment.ProcessorCount Che includerà anche processori hyperthreaded. Quale Vmware può o meno esporre. È più probabile che venga esposto se il processore è abilitato VT E stai usando una tecnologia hypervisor abilitata baremetal.
Se si dispone di XP-SP3 / WIN2k3 o versione successiva È possibile utilizzare WMI per estrarre:
Win32_ComputerSystem.NumberOfProcessors returns physical count
Win32_ComputerSystem.NumberOfLogicalProcessors returns logical count
Se i valori sono gli stessi, è probabile che il tuo sistema non abbia HT o non sia abilitato.
Puoi iniziare a esplorare come estrarre le informazioni WMI in .NET da questo tutorial .