Как я могу программно определить, используется ли многоядерный, гиперпоточный или многопроцессорный?

StackOverflow https://stackoverflow.com/questions/1817268

Вопрос

Я знаю, как получить тип процессора, возможно, это единственный способ, но на самом деле я ищу способ определения из приложения, выполняется ли оно на многоядерном процессоре или на одноядерном процессоре с гиперпоточностью.

(предыстория:хостинг-провайдеры некоторых моих клиентов очень расплывчато представляют, какие ресурсы они предоставляют через VMware images.Предполагается, что это приложение должно работать на многоядерной платформе, но с момента его последнего "перемещения" производительность снизилась.Обычно в многоядерных системах одно ядро подключается к одному потоку, а не к другому.В этой "многоядерности" оба процессора резко увеличиваются, даже в однопоточных приложениях.)

Это было полезно?

Решение

System.Environment.ProcessorCount, который также будет включать гиперпоточные процессоры.Которые Vmware может раскрывать, а может и не раскрывать.Вероятность того, что он будет раскрыт, выше, если на процессоре включена VT И вы используете технологию гипервизора с поддержкой baremetal.

Если у вас XP-SP3 / WIN2k3 или выше, вы можете использовать WMI для извлечения:

Win32_ComputerSystem.NumberOfProcessors returns physical count

Win32_ComputerSystem.NumberOfLogicalProcessors returns logical count

Если значения одинаковы, то, скорее всего, в вашей системе нет HT или она не включена.

Вы можете начать изучать, как извлечь информацию WMI в .NET, с этот учебник.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top