Как я могу определить программно, многоядерный, гиперпоточный или многопроцессорный? - PullRequest
0 голосов
/ 30 ноября 2009

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

(предыстория: провайдеры хостинга некоторых из моих клиентов очень расплывчаты в отношении того, какие ресурсы они делают доступными через образы VMWare. Предполагается, что это приложение будет работать на многоядерных процессорах, но с момента его последнего "перемещения" оно снизило производительность. Как правило, в многоядерных процессорах одно ядро ​​работает с одним потоком, а не с другим. На этом «многоядерном» оба процессора работают даже в однопоточных приложениях.)

1 Ответ

4 голосов
/ 30 ноября 2009

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

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

Win32_ComputerSystem.NumberOfProcessors returns physical count

Win32_ComputerSystem.NumberOfLogicalProcessors returns logical count

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

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

...